编译原理课件1.ppt_第1页
编译原理课件1.ppt_第2页
编译原理课件1.ppt_第3页
编译原理课件1.ppt_第4页
编译原理课件1.ppt_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

编译原理(PrinciplesofCompiling),主讲:段忠祥电话mail:13799928,学时与参考教材,学时:64参考教材:1、陈火旺等,程序设计语言编译原理,国防工业出版社,2003.8.印刷2、AlfredAhoect.编译原理,李建中等译,机械工业出版社,2003.8.(原版-邮电出版社)3、KennethC.Louden,编译原理及实践,冯博琴等译,机械工业出版社,2001.2.印刷4、金成植,编译程序构造原理和实现技术,高等教育出版社,2000.7.,学时与参考教材,5、何炎祥等,编译原理,华中理工大学出版社,2010.4.6、P.M.刘易斯,编译程序设计理论,科学出版社,1984.5.7、高仲仪等,编译技术,西北工业大学出版社,1985.98、杜淑敏等,编译程序设计原理北京大学出版社,1990.11.,主要内容,概述(总体结构、设计方法2)语言与文法(文法、推导、归约、分类、分析树6)有穷自动机(fa正则表达式,dfa2)词法分析(词法分析、正规式与正规文法、DFA状态转移图6)语法分析(自顶向下:LL(1)、递归子程序;自底向上:算符优先、LR14)语义分析(属性文法、各种语句的语法制导翻译8)运行环境(存储分配、过程调用、符号表管理8)中间代码生成、优化(6)目标代码生成(6)总结(4),教学目的,涉及的是一个比较适当的抽象层面上的数据变换(既抽象,又实际)一些具体的表示和变换算法“自顶向下”和“自底向上”的系统设计方法(思想、方法、实现全方位讨论)一个相当规模的系统的设计(含总体结构)AlfredV.Aho:编写编译器的原理和技术具有十分普遍的意义,以至于在每个计算机科学家的研究生涯中,本书中的原理和技术都会反复用到结论:计算机专业最恰当、有效的知识载体之一,教学要求,掌握编译程序总体结构在系统级上认识算法、系统的设计具有把握系统的能力学习有关的原理、实现方法和技术,了解计算学科的基本方法、思想掌握典型方法。“在每一个计算机科技工作者的职业生涯中,这些原理和技术都被反复用到。”兼顾语言的描述方法、设计、应用形式化进一步培养“计算机思维能力”程序的非物理性质,学习方法,勤于思考博览、多思(学而不思则罔、思而不学则怠;书由厚到薄、由薄到厚)、常实践思考由怀疑和答案组成。怀疑是智慧的大门,知道得越多,就越会发问,而问题就越多。发问使人进步。强化基础在独立思考之前,必须先有基础知识。所谓“获得基础知识”并不是形式上读过某门课程,而是将学过的东西完全弄懂。理论与实践的结合能力,学习方法,应对困难不畏惧困难从教训到经验亲身体验要实践(作业、实验),加深理解学习是一个过程上课、读书、复习、做作业、讨论、做实验、自己编程序、上机调试排错是绝对必要的辅导答疑教师是最宝贵的资源自己要思考,以获得最大收获:习题、问题,第1章引论,1.1计算机语言的发展1.2翻译系统1.3编译系统的功能分析1.4编译程序总体结构1.5编译程序的生成1.6编译技术的应用,1.1计算机语言的发展,机器语言(MachineLanguage)汇编语言(AssembleLanguage)0、1代码与助记符:更接近于计算机硬件指令系统的工作高级语言(HighLevelLanguage)定义数据、描述算法(程序)如:C、FORTRAN、PASCAL、C+、JAVA、SQL(数据定义、数据操作)命令语言(Command)以功能封装为特征,高级语言的分类,强制式语言(ImperativeLanguage)FORTRAN(段结构)、BASIC、Pascal(嵌套结构)、C函数(应用)式语言(FunctionalLanguage)LISP、ML逻辑式(基于规则)语言(LogicalLanguage)Prolog面向对象语言(Object-OrientedLanguage)Smalltalk、C+、Java、Ada(程序包),1.2翻译系统,翻译程序(Translator)将某一种语言描述的程序(源程序SourceProgram)翻译成等价的另一种语言描述的程序(目标程序ObjectProgram)的程序。,翻译程序,源程序,目标程序,(*.C/*.PAS/*.AS),(*.OBJ/*.EXE/*.*),1.2翻译系统,解释程序(Interpreter)口译与笔译(单句提交与整篇提交),源程序,输入数据,计算结果,解释程序,1.2翻译系统,编译程序(Compiler)高级语言程序汇编/机器语言程序,源程序,目标程序,编译程序,1.2编译系统,SPCompilerS-SourceO-ObjectOPP-ProgramInputRSRS-RunSys.Output,编译系统(CompilingSystem)编译系统=编译程序+运行系统,支撑环境、运行库等,1.2翻译系统,其它:诊断编译程序(DiagnosticCompiler)优化编译程序(OptimizingCompiler)交叉编译程序(CrossCompiler)可变目标编译程序(RetargetableCompiler)并行编译程序(ParallelizingCompiler)汇编程序(Assembler)、交叉汇编程序(CrossAssembler)、反汇编程序(Disassembler),1.2翻译系统汇总,MLMLPAssemblerDisassemblerALALPCompilerDataHLHLPInterpreterResult,M-MachineL-LangugeP-ProgramA-AssembleH-HighLevel,1.3编译系统的功能分析,程序分析词法、语法、语义分析综合语句的翻译、代码生成例如:标识符左值与右值的绑定(binding)变量:存储单元函数:目标代码序列,1.4编译程序总体结构请参阅P5图1.1,目标代码生成器,代码优化器,语义分析与中间代码生成器,语法分析器,1.词法分析,例:res=fact*(term1+term2);,结果IDNres=IDNfact*(IDNterm1+IDNterm2);,1、词法分析,词法分析器(LexicalAnalyzer)又叫做扫描器(Scanner),完成词法分析功能:词法分析器从左到右扫描源程序(字符串),并将其转换成单词(记号Token)串;同时查词法错误,进行标识符登记符号表管理。输入:字符串输出:(种别码,属性值)序对属性值token的机内表示,2、语法分析,语法分析器(SyntaxAnalyzer,又叫Parser)完成语法分析功能:Parser实现“组词成句”,构造分析树,指出语法错误,指导翻译输入:Token序列输出:语法成分,2.语法分析,res=fact*(term1+term2);,字符串,3.语义分析,功能:分析由语法分析器给出的语法单位的语义获取标识符的属性:类型、作用域等语义检查:运算的合法性、取值范围等子程序的静态绑定:代码的相对地址变量的静态绑定:数据的相对地址,4.中间代码生成,中间代码(intermediateCode)例:id1+id2*id3,后缀表示(逆波兰ReversePolishNotation)id1id2id3*+前缀表示(波兰PolishNotation)+id1*id2id3,四元组表示(三地址码)1(*,id1,id2,T1)2(+,id3,T1,T2),三元组表示1(*,id2,id3)2(+,id1,(1),波兰表示问题Lukasiewicz1929/1951年发明,中缀表示(Infixnotation):(a+b)*(-c+d)+e/f波兰表示(Polish/Prefix/Parenthesis-free/Lukasiewicznotation)也就是前缀表示+*+ab+cd/ef运算顺序从右向左逆波兰表示(ReversePolish/Suffix/Postfixnotation)也就是后缀表示ab+cd+*ef/+运算顺序从左向右,4.中间代码生成,中间代码的特点简单规范机器无关易于优化与转换,三地址码的另一种表示形式T1=id2*id3T2=id1*T1,其它类型的语句举例printf(“hello”)x:=s(赋值)paramx(参数)callf(函数调用)s是hello的地址f是函数printf的地址,对中间代码的优化处理:对代码进行等价变换以求提高执行效率提高运行速度和节省存储空间与机器无关的优化与机器有关的优化,5.代码优化,与机器无关的优化,局部优化常量合并:常数运算在编译期间完成,如8+9*4公共子表达式的提取:基本块内循环优化强度削减代码外提,与机器有关的优化,寄存器的利用将常用量放入寄存器,以减少访问内存的次数体系结构MIMD、SIMD、SPMD、向量机、流水机存储策略根据算法访存的要求安排:Cache、并行存储体系减少访问冲突任务划分按运行的算法即体系结构,划分子任务(MPMD),6.目标代码生成,将中间代码转换成目标机上的机器指令代码或汇编代码,7、表格管理,管理各种符号表(常数、标号、变量、过程、结构),查、填(登记、查找)源程序中出现的符号和编译程序生成的符号,为编译的各个阶段提供信息。辅助语法检查、语义检查完成静态绑定、管理编译过程Hash表、链表等各种查、填表技术,8、错误处理,进行各种错误的检查、报告、纠正,以及相应的续编译处理(如:错误的定位与局部化)词法:拼写语法:语句结构、表达式结构语义:类型不匹配,模块分类,分析:词法分析、语法分析、语义分析综合:中间代码生成、代码优化、目标代码生成辅助:符号表管理、出错处理8项功能对应8个模块,编译程序总体结构,例一个语句的翻译,9编译的遍(Pass),根据系统资源的状况、运行目标的要求等,可以将一个编译程序设计成多遍扫描的形式,在每一遍扫描中,完成不同的任务。遍可以和阶段相对应,也可无关单遍代码不太有效,10、编译的前端与后端,前端与源语言有关、与目标机无关的部分词法分析、语法分析、语义分析与中间代码生成、与机器无关的代码优化后端与目标机有关的部分与机器有关的代码优化、目标代码生成,1.5编译程序的生成,设计目标目标程序小,执行速度快。编译程序小,执行速度快。诊断能力强,可靠性高。可移植性,可扩充性。如何实现编译器?直接用可运行的代码编制太费力!,形图,表示语言翻译的形图,源语言,表示语言,目标语言,1)交叉编译(CrossCompiling)/移植,问题一:A机上有一个C语言编译器,是否可利用此编译器实现B机上的C语言编译器?条件:机有语言的编译程序目的:实现机的语言的编译,1.(人)用语言编制B机的编译程序P0(CB)(机的C编译P1)编译P0,得到在A机上可运行的P2(CB),上次课主要内容,基本概念翻译程序、编译程序、解释程序、编译系统汇编程序、其他编译的扫描遍数、前端、后端,编译程序总体结构,上次课主要内容,T形图移植,3.(机的P2)编译P0,得到在B机上可运行的P3(CB),获得一个工具,2)本机编译器利用,问题二:A机上有一个C语言编译器,现要实现一个新语言NEW的编译器?能利用交叉编译技术么?用C编写NEW的编译,并用C编译器编译它,问题三:直接在一个机上实现C语言编译器,还有别的技术么?解决:用汇编语言实现一个子集的编译程序(P0人)用汇编程序处理该程序,得到P2(P2:可直接运行)用子集编制语言的编译程序(P3人)用P2编译P3,得到P4,3)编译程序的自展技术,4)利用编译程序自动生成器,词法分析器的自动生成程序,词法规则说明,词法分析程序,(C程序),输入:词法(正规表达式)识别动作(程序段)输出:yylex()函数,LEX,语法分析器的自动生成程序,语法规则说明,语法分析程序,(C程序),输入:语法规则(产生式)语义动作(程序段)输出:yyparse()函数,1.6编译技术的应用,把复杂数据看作一条语句数据格式的分析利用词法分析、语法分析方法数据处理的框架基于语法制导的语义处理框架编译技术可以用于各种复杂数据的分析处理,例1-1,DOS命令date的输出格式例:9-2-1993、09-03-1993、9-03-93语法datemonth-day-y

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论