编译原理课程概述授课:胡静手机:13820720927课程教材和参考书教材:教材名称:编译原理(CompilersPrinciples,Techniques,andTools)主编:AlfredV.Aho,RaviSethi,JeffreyD.Ullman,李建中,姜守旭译出版社:机械工业出版社主要参考资料《程序设计语言编译原理(第3版)》,国防工业出版社,陈火旺等编著《编译原理》,清华大学出版社,吕映芝、张素琴、蒋维杜编著《编译器工程》——《DesignaCompiler》,机械工业出版社,KeithD.Cooper、LindaTorczon著;冯速译课程教学内容及时间安排编译原理概论——1.5课时高级语言和文法——2.5课时词法分析——6课时自顶向下语法分析方法——4课时自底向上语法分析法——8课时语法制导翻译——6课时中间代码生成——4课时类型检查——4课时符号表——2课时运行时环境——4课时代码优化——3课时并行编译基础——3课时编译原理引论授课:胡静内容提要编译器构造法的研究目的(什么是编译程序)编译器的结构编译的基本原则编译器应有的性质编译器的应用模型编译过程综述概括和展望编译器构造法的研究目的什么是编译程序编译程序高级程序设计语言书写的程序低级语言程序术语源语言(程序)目标语言(程序)实现语言STI编译器构造法的研究目的编译程序与其他软件的关系软件:计算机系统中的程序及其文档系统软件(操作系统):居于计算机系统中最靠近硬件的一层,其他软件一般都通过系统软件发挥作用。他和具体的应用领域无关,如编译系统和操作系统等。语言处理系统(编译系统):把软件语言书写的各种程序处理成可在计算机上执行的程序。软件语言:用于书写软件的语言。它主要包括需求定义语言,功能性语言,设计性语言,程序设计语言以及文档语言。编译器构造法的研究目的编译器和解释器的比较相同点(执行相同的任务):检查输入程序并确定这个程序是否一个有效程序建立一个内部模型来刻画输入程序的结构和含义决定在执行期间值的存放位置不同点(执行的行为不同):编译器以一个可执行程序的描述作为输入,以另一个等价的可执行程序的描述作为输出。解释器以一个可执行程序的描述作为输入,以执行这一可执行程序描述的结果作为输出。编译器构造法的研究目的好的编译器是计算机科学的缩影包含大量的技术:贪婪算法(寄存器分配)、启发式搜索技术(列表调度)、图形算法(死码消除)、动态规划(指令筛选)、有穷自动机和下推自动机(扫描和语法分析)、不动点算法(数据流分析)处理复杂的问题:动态分配、同步、命名、局部化、存储器分层管理、管道调度提供完整的解决方案:有机的结合算法、软件体系结构和软件工程的各种理论,对棘手问题给出综合性的解答方案。编译器构造法的研究目的一个语言处理系统(编译系统)举例预处理器编译器汇编器装配连接编辑骨架程序源程序目标汇编程序可重定位机器代码绝对机器码可重定位目标文件库编译器构造法的研究目的预处理器—产生编译器的输入宏处理:宏的定义和引用文件包含:把头文件包含到程序的正文中。“理性”预处理器:把现代控制流和数据结构化机制添加到比较老式的语言中。语言扩充:通过大量的内部宏定义来增强语言的能力汇编器—对编译器的输出进行后期加工装配连接编辑器—完成程序的装入和连接编辑两项功能装入过程包括读入可重定位及其代码,修改可重定位地址,并将修改后的指令和数据放到内存中适当的位置连接编辑器允许我们将多个可重定位代码的文件组成一个程序。内容提要编译器构造法的研究目的编译器的结构编译的基本原则编译器应有的性质编译器的应用模型编译过程综述概括和展望编译器的基本原则编译器是工程对象,是具有独特目标的大型软件系统,两个设计原则必须遵守不违背原义编译器必须保持被编译程序的含义不变这一原则是编译器设计者与编译器用户之间的契约的核心实用性原则编译器必须用某种明确的方式改进输入程序例如代码优化等对输入程序的改进编译器应有的性质速度(Speed)空间(Space)反馈(Feedback)调试(Debugging)编译时效率(Compile-TimeEfficiency)编译器的应用模型分析-综合模型分析部分将源程序切分成一些基本块并形成源程序的中间表示词法分析语法分析语义分析综合部分把源程序的中间表示转化为所需的目标程序,需要一些特定的技术符号表管理错误检测与报告中间代码生成代码优化代码生成编译器的应用模型出错处理语法分析程序语义分析程序目标代码生成程序词法分析程序中间代码生成程序代码优化程序表格管理编译的前端(FrontEnd)编译的后端(BackEnd)内容提要编译器构造法的研究目的编译器的结构编译的基本原则编译器应有的性质编译器的应用模型编译过程综述概括和展望词法分析词法分析也叫线性分析和扫描。从左到右的读构成源程序的字符流,分组为多个记号。词法分析器position:=initial+rate*60id1:=id2+id3*60语法分析词法分析也叫层次分析,把源程序的记号进一步分组,产生被编译器用于生成代码的语法短语。程序的语法结构常常需要递归上下文无关文法是递归规则的一种形式化,可以指导语法分析由于词法分析不要求递归,因此我们通常不明确的界定词法分析和语法分析的界限。也就是说,我们将词法分析程序当成语法分析程序调用的一个子程序。语法分析(续)语法分析器id1:=id2+id3*60id1id3id2:=+*60在本例中,算符优先级可以通过如下方法定义:1.定义程序语言的语法规则体现算符的优先级2.通过某些规则库,例如算符优先级表格等来定义算符的优先级语义分析语义分析阶段检测程序的语义错误,收集代码生成阶段要用到的类型信息利用语法分析阶段确定的层次结构来识别表达式和语句中的操作符和操作数语义分析的一个重要组成部分是类型检查语义分析只是一些简单的,可以用一定规则描述的语义信息,而无法判断程序表达的含义是否符合要求的语义分析(续)语义分析器id1id3id2:=+*60id1id3id2:=+*inttoreal60在本例中,几个标识符都是实数类型,而且源程序语言允许整数向实数类型的强制转换内容提要编译器构造法的研究目的编译器的结构编译的基本原则编译器应有的性质编译器的应用模型编译过程综述概括和展望Thanksforyourtime!Questions&Answers