编译原理湖南大学.ppt
《编译原理湖南大学.ppt》由会员分享,可在线阅读,更多相关《编译原理湖南大学.ppt(60页珍藏版)》请在三一办公上搜索。
1、2010-1-14,杨晓波湖南大学信息科学与工程学院Email:2/23/2011QQ群:81711763(编译原理)(输入学号进行验证,进入后改名为年级学号后三位+姓名,如:07101张三),编译原理Compiler Principles,2010-1-14,教材及参考书,赵建华等译.编译原理(第2版).机械工业出版社,2009龙之书陈火旺.程序设计语言编译原理(第3版)国防工业出版社.2000,2010-1-14,学习内容及动机,课程内容编译程序构造的基本原理和实现技术.学习动机:提高学习能力、实践能力和计算思维能力编译程序是程序语言应用的基础 在早期的ACM 图灵奖中程序设计语言、编译理
2、论与方法约占1/3程序语言上千种,而其编译器的构造原理却相通其模型、理论和算法广泛应用,如:代码优化技术用于寻找软件缺陷和漏洞有穷自动机和正则表达式用于深度包检测文法用于自然语言翻译学好编译原理有助于更好地理解高级语言有助于构造一些实用的工具,万变不离其宗,2010-1-14,怎样构造编译程序,构造编译程序的前提:掌握源语言掌握目标语言掌握编译方法,2010-1-14,考核方式及要求,作业 20%+实验 30%+笔试 50%+表现-33要求DIY、按时交抄袭计0分,过期不候作业:word 2003文档,宋体5号,2010-1-14,第一章要点,语言处理器(是什么,做什么)编译器的结构(有什么)
3、编译程序的其他问题遍前端与后端编译程序的构造方法(怎么做)程序语言的发展历程程序设计语言基础,第一章 引 论,2010-1-14,1.1语言处理器,Q:我们怎么让计算机工作的?A:编程。Q:计算机能直接执行什么程序?A:机器语言程序Q:我们所书写的程序一般是面向人类的高级语言程序,它们是怎样执行的?,2010-1-14,1.1语言处理器,程序的执行方式解释型,如:BASIC编译型,如:C,C+混合型,如:JAVA其中后两种都要使用编译程序(编译器)。,2010-1-14,1.1语言处理器,编译程序(compiler)把某一种语言程序(源语言)等价地转换成另一种语言程序(目标语言)的程序,201
4、0-1-14,1.1语言处理器,解释程序 把源语言写的源程序作为输入,但不产生目标程序,而是直接利用输入执行源程序中的指定操作。,2010-1-14,混合编译器,编译执行比解释执行快解释执行错误诊断效果更好JAVA处理器中结合了编译和解释过程,是混合编译器,源程序,编译器,中间代码,2010-1-14,JAVA语言,操作系统平台,Java虚拟机(解释器),Java编译器,javac,java,2010-1-14,.NET框架与VS.NET,.net框架类似java虚拟机,2010-1-14,.net编程工作原理,操作系统平台,CLR,各自的编译器,高级语言代码(支持CLR,符合CLS),托管代
5、码(MSIL),即时编译JIT,操作系统平台,CLR,各自的编译器,操作系统平台,CLR,各自的编译器,操作系统平台,2010-1-14,语言处理系统,要产生可执行的文件,除了编译器外,还需要其他的一些程序。,宏扩展,加入头文件,2010-1-14,1.2 编译器结构,把英文翻译为中文的过程如下:识别出句子中的一个个单词;分析句子的语法结构;根据句子的含义进行初步翻译;对译文进行修饰;写出最后的译文。,词法分析,语法分析,中间代码产生,优化,目标代码产生,2010-1-14,编译器的结构(1),编译器可以分为分析部分和综合部分分析部分(前端,front end)把源程序分解成组成要素,以及相应
6、的语法结构使用这个结构创建源程序的中间表示同时收集和源程序相关的信息,存放到符号表综合部分(后端,back end)根据中间表示和符号表信息构造目标程序前端部分是机器无关的,后端部分是机器相关的。,2010-1-14,编译器的结构(2),编译器可分成顺序执行的一组步骤(phase),前端,后端,与源语言有关,与目标机有关,2010-1-14,词法分析,词法分析/扫描(lexical analysis,scanning)读入源程序的字符流,输出成为有意义的词素(lexeme)token-name由语法分析步骤使用attribute-value指向相应的符号表条目,由语义分析/代码生成步骤使用例子
7、position=initial+rate*60,2010-1-14,语法分析,语法分析/解析(syntax analysis/parsing)根据各个词法单元的第一个分量来创建树型的中间表示形式。通常是语法树(syntax tree)中间表示形式指出了词法单元流的语法结构。,2010-1-14,语义分析,语义分析(semantic analysis)使用语法树和符号表中的信息,检查源程序是否满足语言定义的语义约束。同时收集类型信息,用于代码生成,类型检查,类型转换。,2010-1-14,中间代码生成,根据语义分析的输出,生成类机器语言的中间表示三地址代码:每个指令最多包含三个运算分量t1=i
8、nttofloat(60);t2=id3*t1;t3=id2+t2;很容易生成机器语言指令,2010-1-14,代码优化,通过对中间代码的分析,改进中间代码的质量更快、更短、能耗更低,2010-1-14,代码生成,把中间表示形式映射到目标语言寄存器的分配指令选择内存分配,2010-1-14,1.2.7 符号表管理,符号表是编译中常用的一种数据结构,贯穿编译的各个阶段。它记录源程序中使用的名字及其属性,常见名字及其属性如下:变量 存储位置 类型 作用域过程 过程入口 参数数量和类型、每个参数的传递机制、返回值类型 每个名字对应于一个记录,其一般形式如下:,名字,信息,2010-1-14,1.2.
9、8 将多个阶段组合成遍(pass),趟(PASS)每趟读入一个输入文件,产生一个输出文件。“步骤”是逻辑组织方式“趟”和具体的实现相关,如:前端的词法分析、语法分析、语义分析以及中间代码生成可以组合在一起成为一趟代码优化可作为一个可选的趟后端可作为一趟,2010-1-14,编译区分前端与后端的好处方便移植,有些编译器集合围绕一组精心设计的中间表示形式而创建,使得可将特定语言的前端和特定目标的后端相结合一个前端和不同的目标机后端结合,可建立针对不同目标机器上的编译程序如:JAVA语言的操作平台无关性JAVA定义一种虚拟机代码Bytecode只要操作平台上实现了执行Bytecode的JAVA解释器
10、,就可以执行各种Java程序不同前端和某个目标机的后端结合起来,可生成在同一目标机器上的不同语言的编译程序如:.net平台,2010-1-14,1.2.9 编译器构造工具,Q:怎样构造编译器?A:用汇编语言和机器语言书写高级语言书写移植和自展利用现代软件开发环境和编译器构造工具,2010-1-14,编译器构造工具,语法分析程序生成器根据程序语言的语法描述自动生成语法分析器,如:YACC词法分析程序生成器根据语言语法结构的正则表达式自动生成语法分析器,如:LEX语法制导翻译引擎可生成一组用于遍历分析树并生成中间代码的例程,编译程序生成,2010-1-14,编译器构造工具,代码生成器的生成器根据一
11、组关于如何把中间语言的每个运算翻译成为目标机语言的规则,生成一个代码生成器。数据流分析引擎可帮助收集数据流信息,即程序中的值如何从程序的一个部分传递到另一部分。数据流分析是代码优化的一个重要部分编译器构造工具集提供了可用于构造编译器的不同阶段的例程的完整集合。,编译程序生成,2010-1-14,程序设计语言的发展历程,历程第一代:机器语言第二代:汇编语言(宏命令)第三代:Fortran,Cobol,Lisp,C,C+,第四代:特定应用语言:NOMAD,SQL,Postscript第五代:基于逻辑和约束的语言,Prolog、OPS5强制式语言/声明式语言前者指明如何完成,后者指明要完成哪些计算冯
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 湖南大学
链接地址:https://www.31ppt.com/p-6016554.html