- 1、本文档共657页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
第一章概述
2课程简介教材主要教材:《编译方法、技术与实践》,许畅,冯洋,机械工业出版社参考教材:《编译原理》第二版--机械工业出版社Aho,AlfredV.,MonicaS.Lam,RaviSethi,andJeffreyD.Ullman.Compilers:principles,techniquesandtools.2020.《现代编译原理(C语言描述)》--人民邮电出版社Appel,AndrewW.ModerncompilerimplementationinC.Cambridgeuniversitypress,2004.
3课程简介语法分析树源代 词法分码 析器词法单元流第三版实验:2022年秋季学期~第二版实验:2012年春季学期至2022年春季学期实验一词法分析 语法分析语法分析器实验二语义分析语义分析器注释语法树实验四目标代码生成代码生成器目标代码实验三中间代码生成翻译器中间代码实验五中间代码优化优化管道优化后中间代码
4提纲编译器的结构编译过程语言特征
5什么是编译器一个编译器就是一个程序,读入以某一种语言(源语言)编写的程序,并把该程序翻译成为一个等价的、用另一种语言(目标语言)编写的程序。如果翻译过程发现源程序有错,则报错狭义:程序设计语言→机器代码广义:程序变换C++→C→汇编Pascal→C编译器源程序目标程序
6编译器简介编译器vs.解释器编译器的结构编译的构造工具编译器源程序目标程序
7编译器简介
8编译器效率高,一次编译,多次运行。通常目标程序是可执行的。程序输出编译器源程序程序输入目标程序程序输出程序输入
9解释器直接利用用户提供的输入,执行源程序中指定的操作。不生成目标程序,而是根据源程序的语义直接运行。边解释,边执行,错误诊断效果好。解释器源程序程序输入程序输出
10编译器vs.解释器Java结合了两者:? 先编译成字节码,再由Java虚拟机解释执行? 即时编译(Just-in-timecompiling)
11典型语言(如C)的编译预处理器编译器汇编器链接器加载器
12编译器简介编译器vs.解释器编译器的结构编译的构造工具
13编译器的结构分析部分(Analysis)? 源程序- 语法结构- 中间表示? 搜集源程序中的相关信息,放入符号表? 分析、定位程序中可能存在的错误信息(语法、语义错误)? 又称编译器的前端(frontend),是与机器无关的部分综合部分(Synthesis)? 根据符号表和中间表示构造目标程序? 又称编译器的后端(backend),是与机器相关的部分
14编译器中的若干步骤每个步骤把源程序的一种表示方式转换成另一种表示方式。实践中,某些中间表示不需要明确的构造出来。符号表可由各个步骤使用
15符号表管理记录源程序中使用的变量的名字,收集各种属性? 名字的存储分配? 类型? 作用域? 过程名字的参数数量、参数类型等等符号表可由编译器的各个步骤使用
16类比:英语的分析理解过程词法分析:Thislineisalongersentence.语法分析:语义分析Thislineisalongersentence.
17词法分析词法分析/扫描(lexicalanalysis,scanning)? 读入源程序的字符流,输出有意义的词素(lexeme)? 基于词素,产生词法单元:token-name,attribute-value? token-name由语法分析步骤使用? attribute-value指向相应的符号表条目,由语义分析/代码生成步骤使用例子? position=initial+rate*60? id,1 =, id,2 +, id,3 *, number,4
18语法分析词法分析后,需要得到词素序列的语法结构语法分析/解析(syntaxanalysis/parsing)? 根据各个词法单元的第一个分量来创建树形中间表示形式。通常是语法树(syntaxtree)。? 指出了词法单元流的语法结构。
19语义分析得到语义(meaning),对于编译器来说比较难语义分析(semanticanalysis)? 使用语法树和符号表中的信息,检查源程序是否满足语言定义的语义约束。? 同时收集类型信息,用于代码生成。? 类型检查,类型转换。
20中间代码生成根据语义分析的输出,生成类机器语言的中间表示三地址代码:? 每个指令最多包含三个运算分量? t1=inttofloat(60);t2=id3*t1;t3=id2+t2;
21代码优化通过对中间代码的分析,改进中间
文档评论(0)