编译原理 中南大学软件学院 陈志刚.

Slides:



Advertisements
Similar presentations
一、模型与计算公式 二、基本的组合分析公式 三、概率直接计算的例子 第 1.3 节 古典概率 四、抽签与顺序无关 五、二项分布与超几何分布 六、概率的基本性质.
Advertisements

程序设计基础 第 2 章 解题要有程序 主讲:吴献彩 Tel : QQ :
邱锡鹏 复旦大学计算机科学技术学院 Text Books  “Dragon book”  Compilers: Principles, Techniques, and Tools (2nd Edition)  Alfred V. Aho;Monica S.
第 7 章 数据库 1. Overview  数据库概述  数据库管理系统  数据库的体系结构和数据库模型  SQL 语言  数据库技术  构建数据库系统 2.
林園高中適性入學 高雄區免試入學 及 特色招生介紹 1. 國中學生 國中教育會考 1 ( 每年五月 ) 特色招生 術科考試 五專 免試入學 ( 每年六月 ) 特色招生 甄選入學 高中高職 免試入學 擇一報到 林園高中適性入學  入學管道流程 2.
說 劍 《莊子‧雜篇》─ 第 一 組 賴泊錞 謝孟儒 張維真 羅苡芸
Introduction to Computer Science
硕士论文开题报告 煤炭企业物流信息系统的 研究与设计 指导老师: 学生姓名: 学 号:
第一章 認識程式語言.
第3节 体内物质的运输.
微软与高校信息化 李 志 霄 博士 首席技术官 微软(中国)有限公司.
第六章 数据库和ADO.NET 褚龙现 软件学院.
程式語言與設計 授課教師:蔣德威.
网站如何定制建设???.
南投縣道路交通安全聯席會報 101年4月份會議程序
網頁技術簡介.
西安海天信息工程有限公司 3级系统集成资质认证答辩会演示稿
大美青海 青海湖.
第3节 体内物质的运输.
課程名稱:程式設計 授課老師:________
在线考试系统 答辩人: 朱允昌、朱碧云、张海燕 汇报时间: 指导老师: 任艳、徐怡 软件应用与开发类
转正述职报告 乐恩公司 史航
1.1 数据库技术概述 1.2 三种主要的数据模型 1.3 SQL 语言简介 1.4 SQL Server 2000 基础
第18课 机械运动.
第4章 种群和群落 第3节 群落的结构 自主学习案   合作探究案 课后练习案. 第4章 种群和群落 第3节 群落的结构 自主学习案   合作探究案 课后练习案.
第9章 运行时的存储组织 重点:符号表的内容、组织,过程调用实现, 难点:参数传递,过程说明语句代码结构,
Ch03 VB.NET語法建立ASP.NET 網頁程式設計.
第1章 程式語言與Visual Basic的基礎
第ㄧ章 認識 VB 2008 與主控台應用程式 注意:本投影片僅供上課使用,非經同意,請勿散播或轉載。
第一章 認識Visual C 環境架構 1-1 認識Visual C Visual Studio 概觀
Microsoft .NET 第4組 十月15, 2002 B 陳東傑 B 蔣佳勳
第八章 符号表 符号表的作用: 一致性检查和作用域分析; 辅助代码生成..
BizTalk Server 2004.
Architecting Enterprise Application on .NET
陳維魁 博士 儒林圖書公司 第七章 參數的傳遞 陳維魁 博士 儒林圖書公司.
淺談Visual C# 程式設計 國立台灣師大附中 李啟龍 Jason.
課程名稱:資料庫系統 授課老師:李春雄 博士
南华大学计算机学院 软件工程系 QQ讨论群:
.NET 簡介.
.NET 簡介.
具備可攜性及通話品質量測功能之軟體電話架構設計與實作
数据库实验指导(一)
第1章 .NET与C# 为什么要设计一门新的编程语言? C#在微软的.Net平台中占据什么样的地位?
第一章 Visual Studio、SQL Server介紹與開發環境
第2章 ADO.NET 2.0概述.
鄭士康 國立台灣大學 電機工程學系/電信工程研究所/ 資訊網路與多媒體研究所
数据保护技术(完整性、并发性、安全性和数据库恢复)
Ch01網際網路、HTML 、 Script 、 ASP.NET簡介
开发Web Services 客户端程序 杨永智 MCT/MVP 微软校园大使.
視窗程式設計簡介-VB、Visual Studio
程式語言Visual Basic 傳址與傳值
《网上报告厅》使用说明 北京爱迪科森教育科技股份有限公司.
課程名稱:_____________ 指導教授:_____________
程序语言的现在和未来 孙志岗.
数据库技术与应用 (开学篇) 同济大学.
微软云计算 --Windows Azure platform
Network Application Programming(3rd Edition)
第一章 数 据 库 概 述 第一节 引言 第二节 数据库基本概念 第三节 数据库系统结构 第四节 数据模型 第五节 数据库管理系统
第1章 SQL Server 2005概述 教学提示:SQL Server 2005是微软的下一代数据管理和分析解决方案,它给企业级应用数据和分析程序带来更好的安全性、稳定性和可靠性,使得它们更易于创建、部署和管理,从而可以在很大程度上帮助企业根据数据做出更快、更好的决策,提高开发团队的生产力和灵活度,以及在减少总体IT预算的同时,能够扩展IT基础架构以更好地满足多种需求。
CS, ZJU 4/18/2019 Chapter 7 数据库.
21世纪高职高专规划教材 C#语言程序设计 李继武 彭德林 主 编 张 珑 赵 松 周建辉 副主编
1 打开 SQL Server 2005 安装盘,单击 SPLASH.HTA 文件进行安装,安装界面如图所示。
計算機概論 跨越講義 第4章 基本視窗程式應用 4-1 程式語言簡介 4-2 結構化VS物件導向程式設計
第1章 ASP.NET基础.
導 論 教學投影片.
编译原理实践 1.课程说明及引论.
IT DNA- 微軟MVP、資深IT人胡百敬 資訊產業全攻略!IT知識工作者聯手推薦! 資訊新鮮人》 專業資訊人》 知識工作者》
課程名稱:資料庫系統 授課老師:李春雄 博士
三 顺序结构程序设计 厦大附中信息技术.
案例分析: THE NEXTGEN POS SYSTEM
Presentation transcript:

编译原理 中南大学软件学院 陈志刚

《编译原理》课程简介 地位 计算机专业的一门核心课程 编译程序是计算机的重要系统软件,是高级程序设计语言的支撑基础 课程主要介绍设计和构造编译程序的基本原理和方法 2019/11/10 中南大学软件学院

本门课程的要求 了解计算机高级语言流程序被计算机接受、扫描、词法分析、语法分析、语义解释执行的原理与过程; 掌握编译的原理和基本算法、各种概念和语言描述。 2019/11/10 中南大学软件学院

用途与作用 这是本专业应具备的基本知识,就像其他原理一样,是基础。 三大系统软件: OS、DBMS、Compiling System 开发大型系统软件、工具软件的需要。 看资料、写论文的需要 2019/11/10 中南大学软件学院

《编译原理》前导课程 前导课程及涉及内容 组成原理——计算机组成及结构 微机原理——汇编语言与机器语言 离散数学——推理知识及其完备性 数据结构——树、表等的表示与实现 操作系统——提供虚拟机和系统调用 高级程序设计语言——语言定义和编程 2019/11/10 中南大学软件学院

教学目的 掌握编译的基本理论、常用的编译技术,了解编译过程及编译系统的构造 编译程序一般由词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、目标代码生成程序、代码优化程序、表格管理和出错处理程序等成分构成。通过课程的学习应掌握各个成分的功能和设计原则,以及在编译阶段的逻辑关系。理解他们怎样作为一个整体完成编译任务。 能运用所学技术解决实际问题,能独立编写一个小型编译系统 2019/11/10 中南大学软件学院

意义: 学习编译程序构造原理,技术 更好地理解高级语言 编译的原理和方法有助于构造一些实用的工具 2019/11/10 中南大学软件学院

课程特点: 理解性 技术性 考核: 作业及上机实习:30% 笔试:70% 2019/11/10 中南大学软件学院

1.1 基本概念 1.2 编译过程 1.3 编译程序与程序设计环境 1.4 高级语言程序简介 第一章 引 论 1.1 基本概念 1.2 编译过程 1.3 编译程序与程序设计环境 1.4 高级语言程序简介

1.1 基本概念 一、发展 机器语言→汇编语言→高级语言→工具语言 第1代1GL 2GL 3GL 4GL 机器识别:0|1 代码 相去甚远 机器识别:0|1 代码 相去甚远 2019/11/10 中南大学软件学院

1.1 基本概念 二、翻译程序 把某一种语言程序(称为源语言程序)等价地转换成另一种语言程序(称为目标语言程序)的程序。如:中英互译系统、DBMS语言(DDL,DCL) 源语言程序 目标语言程序 翻译 程序 2019/11/10 中南大学软件学院

1.1 基本概念 三、编译程序(compiler) 把某一种高级语言程序等价地转换成另一种低级语言程序(如汇编语言或机器语言程序)的程序。 编译程序分类 诊断编译程序&优化编译程序 交叉编译程序&可变目标编译程序 高级语言程序 机器语言程序 结果 编译 程序 翻译 运行 2019/11/10 中南大学软件学院

1.1 基本概念 四、解释程序 把源语言写的源程序作为输入,但不产生目标程序,而是边解释边执行源程序本身。 源程序 结果 解释 程序 解释执行 2019/11/10 中南大学软件学院

编译程序 vs. 解释程序 编译 解释 2019/11/10 中南大学软件学院

1.1 基本概念 五、执行高级语言程序的步骤 把高级语言程序编译成低级语言目标程序 执行目标程序 2019/11/10 中南大学软件学院

1.2 编译过程 把英文翻译为中文 识别出句子中的一个个单词; 分析句子的语法结构; 根据句子的含义进行初步翻译; 对译文进行修饰; 写出最后的译文。 2019/11/10 中南大学软件学院

1.2 编译过程 一、高级语言程序的编译过程 词法分析 语法分析 中间代码产生 优化 目标代码生成 作用、实现者 (并非每个编译过程均有以上全过程) 2019/11/10 中南大学软件学院

1. 词法分析 任务: 输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个单词符号。 依循的原则:构词规则 描述工具:正规式和有限自动机 FOR I := 1 TO 100 DO 保留字 标识符 等符 整常数 保留字 整常数 保留字 2019/11/10 中南大学软件学院

2. 语法分析 任务:在词法分析的基础上,根据语言的语法规则把单词符号串分解成各类语法单位。 依循的原则:语法规则 描述工具:上下文无关文法 Z := X + 0.618 * Y 算术表达式,赋值语句(层次结构分析) 2019/11/10 中南大学软件学院

3. 中间代码产生 任务:对各类不同语法范畴按语言的语义进行初步翻译。 依循的原则:语义规则 中间代码:三元式,四元式,树形结构等 Z:=X + 0.618 * Y 翻译成四元式为 (1) * 0.618 Y T1 (2) + X T1 T2 (3) := T2 _ Z 2019/11/10 中南大学软件学院

4. 优化 任务:对于前阶段产生的中间代码进行加工变换,以期在最后阶段产生更高效的目标代码。 依循的原则:程序的等价变换规则 FOR K:=1 TO 100 DO BEGIN X:=I+1; M := I + 10 * K; N := J + 10 * K; END 2019/11/10 中南大学软件学院

中间代码(一) 序号 OPR OPN1 OPN2 RESULT 注释 (1) := 1 K K:=1 (2) j< 100 K (10) if (100<K) goto (10) (3) + I 1 X X:=I+1 (4) * 10 K T1 T1:=10*K (5) + I T1 M M:=I+T1 (6) * 10 K T2 T2:=10*K (7) + J T2 N N:=J+T2 (8) + K 1 K K:=K+1 (9) j (2) goto (2) (10) 2019/11/10 中南大学软件学院

转换后的等价代码(二) 序号 OPR OPN1 OPN2 RESULT 注释 (1) + I 1 X X:=I+1 (2) := I M M:=I (3) := J N N:=J (4) := 1 K K:=1 (5) j< 100 K (10) if (100<K) goto (10) (6) + M 10 M M:=M+10 (7) + N 10 N N:=N+10 (8) + K 1 K K:=K+1 (9) j (5) goto (5) (10) 2019/11/10 中南大学软件学院

5. 目标代码产生 任务: 把中间代码变换成特定机器上的目标代码。 依赖于硬件系统结构和机器指令的含义 目标代码三种形式: 绝对指令代码: 可直接运行 可重新定位指令代码: 连接装配, 汇编指令代码: 需要进行汇编 2019/11/10 中南大学软件学院

模块A … a 模块B … b 模块C … c 模块B … b 模块C … c 模块A … a 模块D … 模块C … c 模块A … a 2019/11/10 中南大学软件学院

5. 目标代码产生 例: b=a+2 MOV a, R1 ADD #2, R1 MOV R1, b 0001 01 00 00000000 * 0011 01 10 00000010 0100 01 00 00000100 * L=00001111 0001 01 00 00001111 0100 01 00 00010011 2019/11/10 中南大学软件学院

1.2 编译过程 二、编译程序的逻辑结构 2019/11/10 中南大学软件学院

1.2 编译过程 三、表格与表格管理 常见的表格:符号名表,常数表,标号表,入口名表,过程引用表。 格式: 名字 信息 2019/11/10 中南大学软件学院

例: PASCAL程序段: PROCEDURE INCWAP(M,N:INTEGER); LABEL START; VAR K:INTEGER; BEGIN START: K:=M+1; M:=N+4; N:=K; END. 2019/11/10 中南大学软件学院

2019/11/10 中南大学软件学院

2019/11/10 中南大学软件学院

1.2 编译过程 四、出错处理 出错处理程序:发现源程序中的错误,把有关错误信息报告给用户 语法错误 语义错误 2019/11/10 中南大学软件学院

1.2 编译过程 五、遍(Pass) 所谓“遍”,对源程序或源程序的中间结果从头到尾扫描一次,并作有关的加工处理,生成新的中间结果或目标程序。 每遍由从外存上获得前一遍的工作结果开始,完成工作后,把结果存在外存上。每遍工作完成后所占用的存贮空间大部分被释放。 例:IBM Pascal: Pass1, Pass2 Link? 生成可重定位代码。 所以运行时要连接成绝对指令代码。 2019/11/10 中南大学软件学院

1.2 编译过程 六、编译前端与后端 编译前端:与源语言有关,如词法分析, 语法分析,语义分析与中间代码产生, 与机器无关的优化 中间语言 目标语言 编译前端:与源语言有关,如词法分析, 语法分析,语义分析与中间代码产生, 与机器无关的优化 编译后端 :与目标机有关,与目标机有关的优化,目标代码产生 2019/11/10 中南大学软件学院

1.3 编译程序与程序设计环境 程序设计环境 集成化的程序设计环境 编辑程序 编译程序 连接程序 调试工具 2019/11/10 中南大学软件学院

.NET Framework与VS.NET Operating System Common Language Runtime ADO.NET: Data and XML ASP.NET: Web Services & Web Forms Windows Forms Common Language Specification Visual Studio.NET VB C++ C# JScript … VS.NET是在.NET Framework上工作的最佳选择。 让我们看一看它和.NET Framework的关系 最上一层,支持多种语言,只要支持通用语言规范的语言它都支持。 ASP .NET是基于Web开发技术的核心,Windows Forms类似一个弱化的MFC(企业及网络应用中,Rich Client UI不再是重要组成部分,基于Web的方式将成为主流) ADO.NET提供全面的数据及XML访问技术,微软的UDA(统一数据访问)思想在这里充分得到体现。Database、XML在这里得到充分集成,随着SQL Server下一版本的推出,XML与数据库将充分融合成为XML DB。 CLR是.NET Framework超越Java的主要体现之一,它为所有的语言支持垃圾收集,线程管理等功能 OS就不用说了,MS的强项。 VS .NET则在一个整合的IDE中为.NET Framework提供了一个简单易用、整合企业建模工具的综合开发工具,当Linux还在追求User Friendly的时候,微软早已经进入了Developer Friendly的时代。好处:降低总拥有成本。 2019/11/10 中南大学软件学院

1.3 编译程序与程序设计环境 编译程序的生成 以汇编语言和机器语言为工具 优点: 可以针对具体的机器,充分发挥计算机的系统功能。生成的程序效率高。 缺点: 程序难读、难写、易出错、难维护、生产的效率低。 2019/11/10 中南大学软件学院

1.3 编译程序与程序设计环境 高级语言书写 优点: 程序易读、易理解、容易维护、生产的效率高。 优点: 程序易读、易理解、容易维护、生产的效率高。 缺点: 难以充分发挥计算机的系统功能,生成的程序效率低。 2019/11/10 中南大学软件学院

1.3 编译程序与程序设计环境 高级语言书写 利用已有的某种语言的编译程序实现另一语言的编译程序。 L2语言 A代码 P2: L1语言 2019/11/10 中南大学软件学院

1.3 编译程序与程序设计环境 移植方法 把一种机器上的编译程序移植到另一种机器上。 L语言 B代码 P2: L语言 B代码 P2: L语言 A代码 L语言 A代码 P1: 2019/11/10 中南大学软件学院

1.3 编译程序与程序设计环境 自展技术 L1+L2+...+Ln … L1+L2 L1 2019/11/10 中南大学软件学院

1.3 编译程序与程序设计环境 编译程序自动产生 编译程序-编译程序,编译程序书写系统 L语言的语法描述 编译程序 L语言的 语义描述 自动产生器 L语言的 编译程序 目标语言 或机器描述 LEX 词法分析程序产生器 YACC 语法分析程序产生器 2019/11/10 中南大学软件学院

1.4 高级语言程序简介 一、参数传递 模块之间进行参数传递有三种形式: 1、传地址(call by reference): 把实在参数的地址传递给相应的形式参数 2、传值(call by value): 调用段把实在参数的值计算出来并放在被调用段 可以拿到的地方,把值带入。 3、传名(call by name): 过程调用的作用相当于把被调用的过程体抄到调 用出现的地方,但把其中任一出现的形式参数都替换 成相应的实在参数(文字替换)。 2019/11/10 中南大学软件学院

1.4 高级语言程序简介 二、存贮管理 1、静态存贮分配 编译时就安排好目标程序运行时的全部数据空 间,并能确定每个数据项目的单元地址。 2、动态存贮分配 如果允许递归、可变数据结构,则必须动态分 配。 ①栈式:整个程序数据空间安排在一个栈中 ②堆式:允许自由地申请和退还空间 2019/11/10 中南大学软件学院

1.4 高级语言程序简介 例:对于下述程序,试分析用传名、传值、传 地址方法传递参数时所得的打印结果。 PROGRAM SS(input,output); VAR A,B:integer; PROCEDURE P(x,y,z:integer); begin y:=y+1;z:=z+x; end; BEGIN A:=2;b:=3; P(A+B,A,A); writeln (‘A=‘,A); END 2019/11/10 中南大学软件学院

1.4 高级语言程序简介 解: (1)传名:相当于执行 A:=2;B:=3; A:=A+1;A:=A+(A+B) writeln(‘A=‘,A); 所以,结果为A=9 (2)传值:把实参的值计算出来传给形参。 在调用过程P时,形参x=5;y=2;z=2 出过程P时,形参x=5;y=3;z=7 这并不把结果回送到主程序,所以结果为A=2 2019/11/10 中南大学软件学院

1.4 高级语言程序简介 所以,①为A:=A+1=3 ②为A:=A+T=8。 因此,最后A=8. (3)传地址:实参计算出结果,把地址送形参。 设变量T=A+B(结果为5)。执行时把T、A、A的 地址(设为addr1,addr2,addr2)送给形参: x=daar1,y=addr2,z=addr2。 T的地址addra即x A的地址addra即y A的地址addra即z 执行过程P即为:①y↑:=y↑+1;②z↑:=z↑+x↑ 所以,①为A:=A+1=3 ②为A:=A+T=8。 因此,最后A=8. T A B 5 2 3 2019/11/10 中南大学软件学院

1.4 高级语言程序简介 例: Procedure P(x,y,z); begin y:=x+y; z:=z*z; end begin A:=2; B:=A*2; P(B-A,A,B); print A,B 传地址、传值,结果如何? 2019/11/10 中南大学软件学院