编译程序构造原理和实现

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

编译原理及实现技术计算机科学与技术学院申春课件网址:cc.jlu.edu.cn-课程资源-课程总览-计算机科学与技术学院-编译原理与实现2编译程序及功能编译程序的逻辑结构编译程序的实现途径课程学习的意义和学习方法第一章编译引论31.1编译程序及功能编译程序:(Compiler,compilingprogram)也称为编译器,是指把用高级程序设计语言书写的源程序,翻译成等价的机器语言格式目标程序的翻译程序。编译程序高级语言源程序机器语言目标程序翻译程序计算机源程序A计算机源程序B4高级语言程序的处理过程源程序文件(.c)预处理器标准源程序文件(.i)编译程序目标汇编代码(.asm,.s)汇编程序可重定位的目标机器代码(.obj,.o)连接/装配程序绝对机器代码(.exe,.out)编辑器51.2程序设计语言的发展机器语言:能够被计算机的硬件系统直接执行的机器指令序列,如“1011011000000000”。汇编语言:将硬件指令用一些助记符表示,即符号化的机器语言,如“ADDAX,15”。高级语言:模仿便于理解的自然语言和数学语言,采用一组形式规则来描述的人工语言。61.3高级语言的几种执行方式1.编译方式:源语言为高级语言,目标语言是低级语言(汇编或机器语言)的翻译程序。源程序目标程序(*.C)(*.OBJ/*.EXE)编译程序程序的输入数据运行结果71.3高级语言的几种执行方式2.解释方式:对源程序直接逐句地分析执行。解释器相当于源程序的抽象执行机,是语言的实现系统。解释程序源程序运行结果(basic,脚本语言)输入数据83.语言的转换执行方式:将A语言程序转换为B语言程序,用B语言已有的编译器去编译执行。(同级程序设计语言)1.3高级语言的几种执行方式编译、解释A语言程序转换程序B语言程序运行结果91.4编译程序的逻辑结构表处理错误处理目标代码生成中间代码优化中间代码生成语义分析语法分析词法分析目标程序源程序10依据语言的词法规则,扫描源程序的字符序列,识别每一个单词及其种类,并将其表示成所谓的机内表示TOKEN记号形式。词法分析(LexicalAnalysis)for(i=1;i30;i++)单词种类:关键字:if、then、for、while等;标识符;常量;运算符特殊符分界符:标点符号、左右括号等等.保留字,for界限符,(标识符,i运算符,=常量,1界限符,;标识符,i运算符,常量,30界限符,;标识符,i运算符,++界限符,)11语法分析(SyntaxAnalysis)依据语言的语法规则,将单词分解成各类语法短语(可表示为语法树),确定整个输入串是否构成一个语法上正确的程序。+:=*赋值语句表达式表达式标识符表达式标识符first表达式标识符count常数10表达式sum:=first+count*101.赋值语句::=标识符:=表达式2.表达式::=表达式+表达式3.表达式::=表达式*表达式4.表达式::=(表达式)5.表达式::=标识符6.表达式::=常数sum12语义分析(SemanticAnalysis)检查源程序有无语义错误,为代码生成阶段收集信息。(标识符是否声明、类型检查、强制类型转换、下标越界检查等)inti,a[20]=0;for(i=1;i30;i++)a[10]=a[10]+i;13生成如下四元式形式的中间代码序列:1、(int-to-real,10,-,t1)2、(*,count,t1,t2)3、(+,first,t2,t3)4、(:=,t3,-,sum)例:sum:=first+count*10中间代码生成(IntermediateCodeGeneration)为便于对程序的优化、移植和修改,将源程序转换成一种称为中间代码的内部表示形式。中间代码是一种简单的、含义明确的记号系统,例如四元式(运算符,对象1,对象2,结果)。14中间代码优化(IntermediateCodeOptimization)在不改变源程序语义的前提下变换或改造中间代码,使生成的目标代码更为高效,即缩短运行时间或节省存储空间。1、(int-to-real,10,-,t1)2、(*,count,t1,t2)(*,count,10.0,t2)15目标代码生成(CodeGeneration)中间代码变换为特定机器上的机器指令代码(绝对指令代码或可重定位的指令代码)或汇编指令代码。例:sum:=first+count*10生成如下汇编代码:1.MOVcount,R12.MULTR1,#10.03.MOVfirst,R24.ADDR1,R25.MOVR1,sum四元式中间代码序列:1、(*,count,10.0,t2)2、(+,first,t2,t3)3、(:=,t3,-,sum)表格管理(Symbol-TableManagement)较大的编译程序用到很多表格,为了合理地管理表格(构造、查找、更新),很多编译程序设立一些专门子程序(称为表格管理程序)负责管理表格。错误处理(ErrorDetectionandReporting)编译程序各个阶段还存在着错误处理模块,当有错误出现时,由相应的错误处理模块给出解决方案,使得编译器能够继续进行下去。词法和语法错误检查集中一次完成,而语义错误检查要分散在语法分析以后的各个阶段。17遍(Pass)所谓“遍”就是对源程序或源程序的中间表示形式从头到尾扫描一次,并作加工处理,生成新的中间结果或目标程序。目标代码生成中间代码优化中间代码生成语义分析语法分析词法分析目标程序源程序前端后端181.5编译程序实现方法转换法:将A语言程序转换成B语言的程序,再利用B语言的编译器实现A语言。自展法:实际上就是用低级语言先实现一个简单的编译器,然后用这个编译器的语言再去编写一个更高级的编译器,这个新编译器是旧编译器的扩展的过程。移植法:修改目标代码或者修改编译程序的后端。工具法:Lex、Yacc等工具生成语法分析程序。(软件自动化研究成果)19加深对高级语言的工作原理的理解;提高设计大型软件的能力;提高形式化、抽象化的理解和运用能力;编译技术的应用。可以将该原理应用于软件逆向工程、程序分析/验证、模型转换及和软件安全等涉及元级操作的领域;受资源限制的嵌入式系统;可以灵活设计、实现自定义语言;1.5课程的意义20学习编译原理的方法理论教学64学时实践教学16学时(第9周-12周)21自定义SNL语言(SmallNestedLanguage),实现该语言的编译程序

1 / 21
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功