《编译原理-陈火旺版-第一章.ppt》由会员分享,可在线阅读,更多相关《编译原理-陈火旺版-第一章.ppt(32页珍藏版)》请在三一办公上搜索。
1、编译方法,中国人民大学信息学院陈文萍,教学目的&要求,教学目的介绍程序设计语言编译程序构造的一般原理、基本设计方法、主要实现技术方法和一些自动构造工具教学要求掌握编译器的基本结构掌握编译器的工作机制能独立完成小型编译程序 能将所学的技术和算法应用于类似软件的设计和实现中 联系信息:E-mail:,教学安排,讲授内容 课时 1.概述22.高级语言及其语法描述 2-43.词法分析6-84.自上而下语法分析4-65.自下而上语法分析10-12,评分标准,平时成绩:10%实验成绩:20%(两个实验)期末成绩:70%(笔试闭卷),1.概述,1.1 什么是编译程序1.2 编译过程1.3 编译程序的结构1.
2、4 与编译程序相关的程序1.5 编译程序的生成,1.1 什么是编译程序,编译程序:把高级程序设计语言翻译成等价的低级语言程序,最终生成可执行代码。功能:翻译程序,语言转换系统编译型语言:C,C+等翻译程序:把一种程序语言翻译成另一种程序语言的程序,两者逻辑上等价。如:编译,汇编,反汇编 等。,1.1 什么是编译程序,解释程序:以源程序作为输入,不产生目标程序,而是按照语言的定义,边解释边执行。许多用于编译程序的构造技术同样也适用于解释程序。解释型语言:如BasicJava:先编译为中间代码,再解释执行。,1.2 编译过程,引例:翻译(编译)程序的工作过程:譬如:“I wish you succ
3、ess.”翻译成汉语。1)单词进行词法分析:“I”“wish”“you”“success”(代)(动)(代)(名)我 希望 你 成功2)语法分析:(主语)(谓语)(间宾)(直宾)结论:是一个合乎英语语法的句子。3)语义分析:我希望你成功。4)汉语句子进行修饰(优化):祝你成功。,1.2 编译过程,编译器的工作过程词法分析语法分析语义分析及中间代码生成代码优化目标代码生成,1.2 编译过程词法分析,扫描源程序的字符串,识别单词(基本字、标识符、常数、算符、界符)例:position:=initial+rate*60;,1.2 编译过程词法分析,又如一个C源程序片断:int a;a=a+2;词法分
4、析后可能返回:单词类型 单词值基本字 int标识符(变量名)a界符;标识符(变量名)a算符(赋值)=标识符(变量名)a算符(加)+整数 2界符;,1.2 编译过程语法分析,依据语法规则,把源程序的单词符号串组成语法单位(短语、子句,语句)层次分析例:position:=initial+rate*60;规则::=“:=”:=“+”:=“*”:=:=:=,1.2 编译过程语法分析,1.2 编译过程语法分析,分析结果:id1:=id2+id3*N,1.2 编译过程语法分析,规则:=“:=”:=“+”:=“*”:=:=:=position+initial:=rate*60-语法错!,1.2 编译过程语
5、义分析,语义审查(静态语义)上下文相关性类型匹配类型转换例:Program p();Var rate:real;procedure initial;position:=initial+rate*60/*error*/*error*/*warning*/;,Program p();Var rate:real;Var initial:real;Var position:real;position:=initial+rate*60,1.2 编译过程语义分析,1.2 编译过程语义分析,:=,+,inttoreal 60,*,Id1 Position real,Id2 initial real,Id3
6、rate real,1.2 编译过程中间代码生成,独立于具体的硬件与机器指令接近,易变换成机器指令四元式:(算符、左操作数、右操作数、结果)对左右操作数进行某种运算,所得值保存在结果中按语义规则,生成四元式序列,1.2 编译过程中间代码生成,id1:=id2+id3*60(1)(inttoreal,60-t1)(2)(*,id3t1t2)(3)(+,id2t2t3)(4)(:=,t3-id1),1.2 编译过程代码优化,功能:对中间代码加工变换,生成更高效的目标代码手段:公共子表达式的提取,循环优化,删除无用代码等原则:等价变换,1.2 编译过程代码优化,例:id1:=id2+id3*60(1
7、)(inttoreal60-t1)(2)(*id3t1t2)(3)(+id2t2t3)(4)(:=t3-id1)变换(1)(*id360.0t1)(2)(+id2 t1id1),1.2 编译过程目标代码生成,中间代码特定机器上的低级语言代码目标代码的形式:绝对指令代码可重定位的指令代码汇编指令代码,(*,id3,60.0,t1)(+,id2,t1,id1),movfid3,R2mulf#60.0,R2movfid2,R1addfR2,R1movfR1,id1,1.3 编译程序结构,编译程序框架,出错处理程序,语法分析器,语义分析与中间代码生成器,目标代码生成器,词法分析器,代码优化器,表格管理
8、程序,源程序,单词符号,语法单位,中间代码,中间代码,目标代码,1.3 编译程序结构表格管理,符号表:记录源程序中使用的名字收集每个名字的各种属性信息类型、作用域、分配的存储单元信息,1.3 编译程序结构出错处理,功能:检查错误、报告出错信息、排错、恢复编译工作错误分类语法错误:非法字符,括号不匹配语义错误:说明错误,作用域错误,类型不一致,1.3 编译程序结构编译阶段的组合,遍(Pass)对源程序或源程序的中间结果从头到尾扫描一遍编译的前端(front end):与源语言有关,与目标机无关词法分析,语法分析,语义分析,中间代码生成编译的后端(back end):与目标机有关,依赖于中间语言代
9、码优化,目标代码生成,1.4 与编译程序相关的程序,解释程序(interpreter)汇编程序(assembler)连接程序(linker)装载程序(loader)编辑器(editor)调试程序(debugger)预处理器(preprocessor)描述器(profiler)项目管理器(project manager),1.5 编译程序的生成,实现编译程序的语言:机器语言,汇编语言或高级语言T型图:S:源语言;T:目标语言;I:编译器实现语言,1.5 编译程序的生成,T型图的组合交叉编译,1.5 编译程序的生成,自编译(自举),反复此过程,以将要编译的语言编写一个编译器,核心的小编译器,较优的编译器,编译器的最终版本,1.5 编译程序的生成,移植一个用自身源代码编写的编译器,交叉编译器,原始编译器,目标重定位为K的编译器,目标重定位后的编译器,