您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 编译原理chapter1
第一章什么是编译编译器的工作阶段编译器各阶段的工作编译程序的逻辑结构编译器的组织编译器的设计编译技术和软件工具学习本课程应注意的问题编译概述编译程序目标程序源程序把高级语言源程序翻译成等价的低级语言目标程序。编译程序的功能一个编译程序的重要性体现在屏蔽机器细节,使程序设计者独立于机器。程序设计语言程序的典型处理过程(图)不同编译程序存在差异,但基本任务和使用的基本技术是相同的。编译程序的产生与发展编译程序完成从源程序到目标程序的翻译工作,是一个复杂的整体过程。从概念上讲,一个编译程序的整个工作过程是划分阶段进行的,每个阶段将源程序的一种表示形式转换成另一种表示形式,各个阶段进行的操作在逻辑上是紧密连接在一起的,下图是一个编译过程各个阶段的典型划分:词法分析语法分析语义分析中间代码生成优化目标代码生成目标代码源程序符号表管理错误诊查处理编译程序的工作阶段词法分析阶段的任务:是从左到右一个字符一个字符地读入源程序,对构成源程序的字符流进行扫描和分解,从而识别出一个个单词。词法分析阶段滤掉了单词间的空格所谓单词是指逻辑上紧密相连的一组字符,这些字符具有集体含义.源程序PROGRAMm;VARa,b,c:real;BEGINread(b,c);a:=b+c*60;write(a)END.经词法分析源程序被加工成单词流保留字,PROGRAM标识符,m分隔符,;保留字,VAR标识符,a标识符,b标识符,c分隔符,:标识符,real分隔符,;保留字,BEGIN…...标识符,a算符,:=标识符,b算符,+标识符,c算符,*常数,60……保留字,END分隔符,.语法分析阶段的任务:是在词法分析基础上将单词序列分解成各类语法短语(比如程序、语句、表达式等),通过语法分析确定整个输入串是否构成一个语法上正确的程序。语法分析所依据的是语言的语法规则,即描述程序结构的规则程序结构通常是由递归规则表示的,如表达式的定义。赋值语句变量:=表达式表达式+项项因子b项*因子因子c60a赋值语句经语法分析生成分析树词法分析和语法分析本质上都是对源程序的结构进行分析,但词法分析的任务仅对源程序进行线性扫描即可完成,但这种线性扫描则不能用于识别递归定义的语法成分.语义分析阶段的任务:是审查源程序有无语义错误,为代码生成阶段收集类型信息。语义分析的一个工作是进行类型审查,审查每个算符是否具有语言规范允许的运算对象,当不符合语言规范时,编译程序应报告错误。:=a+b*cinttoreal60赋值语句经语义分析生成语法树中间代码生成阶段的任务:将源程序变成一种易于翻译成目标代码的内部表示形式。中间代码是结构简单、含义明确的记号系统,常用形式是四元式,格式为:(运算符,运算对象1,运算对象2,结果)中间代码设计的原则:容易生成和容易将它翻译成目标代码生成中间代码1)(inttoreal,60,-,temp1)2)(*,c,temp1,temp2)3)(+,b,temp2,temp3)4)(:=,temp3,-,a)代码优化阶段的任务:是对前阶段生成的中间代码进行变换或改造,使生成的目标代码更为高效。目标代码生成阶段的任务:把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。目标代码生成的工作与硬件系统结构和指令含义有关,涉及硬件系统功能部件的运用,机器指令的选择,变量存储空间的分配以及寄存器调度等.优化(*,c,60.0,temp1)(+,b,temp1,a)生成目标代码movfc,r2mulf#60.0,r2movfb,r1addfr2,r1movfr1,a表格管理任务:为编译各阶段工作提供信息表格的构造、查找或更新。符号表名字种类类型层次偏移量m过程0a变量real1db变量real1d+4c变量real1d+8错误的诊查处理编译程序在各个阶段应诊断和报告源程序中的错误,包括词法错误,语法错误,语义错误。编译程序应报告出错地点,并给出简明准确的提示信息。将错误所造成的影响限制在尽可能小的范围内,使程序的其余部分能继续编译下去,有些编译程序还能自动校正错误。上述编译过程的划分是一个典型处理模式,并非所有的编译程序都分成这样几个阶段,不过多数实用的编译程序都采用上述几个阶段的工作过程。词法分析程序语法分析程序语义分析程序中间代码生成程序代码优化程序目标代码生成程序目标代码源程序符号表管理程序错误诊查处理程序编译程序的逻辑结构编译程序(器)的组织前端和后端源程序中间代码目标代码仅依赖源语言依赖目标机,只与中间代码有关遍(PASS):对输入文件(源程序或其等价的中间语言程序)从头到尾扫视,完成预定处理的过程。遍输入文件输出文件前端后端词法分析语法分析语义分析和中间代码生成源程序中间代码符号表管理错误的诊查处理把前端组织成一遍扫描一种做法编译程序趟划分的主要参考因素是源语言和目标机的特征一个多遍的编译程序较之一遍的编译程序可能少占内存,逻辑结构可能清晰些,但效率相对可能差点解释程序及其与编译程序的比较1.解释程序功能:源程序计算结果初始数据2.解释与编译的区别:工作模式:这是根本区别,编译把源程序翻译成目标代码,而解释直接得到计算结果,不生成目标代码。存储区内容:编译方式翻译和执行分开,解释方式翻译和执行同时并允许修改源程序,因此二者存储组织不同。效率:解释慢于编译,因此很多语言两种方式都有。解释程序软件工具开发常用到编译技术和方法语言的结构化编辑器(语法制导)语言程序的调试工具(语法分析和语义处理)程序格式化工具语言程序测试工具(语法分析)程序理解工具高级语言之间的转换工具(简化编译程序)并行编译技术(并行机和多处理机发展的要求)程序设计语言范型强制式语言(或过程式)函数式语言基于规则(逻辑)的语言面向对象语言设计编译程序应首先研究的问题首先研究源程序的语法和语义及运行模型,源是设计编译程序的出发点。研究目标计算机,设计目标代码的指令系统,它是由目标计算机扩充而成,扩充后的计算机称作抽象计算机。目前的通用计算机往往和源语言执行模型不一致。。编译程序源程序目标程序抽象目标教和学的几个问题重要性:处理字符串的一般方法;构造大程序的方法;实用;研究课题:新的语言及实现技术;并行编译技术。学习方法:(1)源程序是源泉;(2)把每个阶段放到整个编译程序背景中学习;(3)认真做作业。需预处理的源程序预处理程序源程序编译程序目标汇编程序汇编程序可再装配的机器代码装配/连接编辑程序绝对机器代码可再装配目标文件20世纪50年代早期奠基,功能有限20世纪50年代中期成功开发一批编译程序20世纪50年代末期开始研究编译程序的自动生成工具20世纪60年代起,使用自展技术构造编译程序20世纪70年代并行计算机逐步发展,并行编译技术研究逐步展开并逐步深入20世纪70年代开始,面向对象编译程序逐步成熟并逐步广泛使用1)任何标识符是表达式2)任何常数是表达式3)若表达式1和表达式2都是表达式,那么:表达式1+表达式2表达式1*表达式2(表达式1)都是表达式标识符:=表达式
本文标题:编译原理chapter1
链接地址:https://www.777doc.com/doc-3374429 .html