《《编译原理概述》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《编译原理概述》PPT课件.ppt(42页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、编译原理编译原理第一章 概 述 内容内容l1.1 编译程序l1.2 编译过程l1.3 编译程序的基本结构l1.4 编译程序的生成方法l1.5 编译技术的发展和应用1.1 编译程序编译程序(compiler)l翻译程序l自然语言:汉语阿拉伯语 l高级程序设计语言机器语言l源语言文本(翻译)等价目标言语文本l编译程序:l是现代计算机系统的基本组成部分l从功能上看,编译程序就是一个语言翻译程序,它把一种语言(源语言)书写的程序翻译成等价的机器语言(目标语言)的程序.编译程序编译程序 功能功能编译程序的源语言source language(源程序Source Program)编译程序的目标语言obje
2、ct or target language(目标程序Object or Target Program)编译程序的实现语言Implement language(编译程序Compiler)编译程序编译程序S TI 高级语言程序高级语言程序C,C+,Java等等汇编语言或汇编语言或机器语言程序机器语言程序源程序源程序目标程序目标程序将便于人编写、阅读、维护的高级计算机语言 翻译为计算机能识别、运行的低级语言程序。l 预处理器编译器汇编器装配连接编辑源程序 源程序 目标汇编程序 可重定位机器代码 绝对机器码可重定位目标文件库现代编译器的主要工作流程现代编译器的主要工作流程编译程序所处的层次编译程序所处
3、的层次操作系统编译程序裸机源程序的执行阶段源程序的执行阶段编译编译程序程序源程序源程序机器语言目标程序机器语言目标程序初始数据初始数据运行系统运行系统结果结果|编译阶段编译阶段|运行阶段运行阶段|编译编译程序程序源程序源程序机器语言目标程序机器语言目标程序初始数据初始数据运行系统运行系统结果结果|编译阶段编译阶段|汇编阶段汇编阶段|运行阶段运行阶段|汇编汇编程序程序汇编语言汇编语言目标程序目标程序语言转语言转(变变)换系统换系统C+编译器C+汇编JavaBytecodeJava编译器C/C+编译器把源代码编译成汇编代码,Java编译器把Java源代码编译成字节码bytecode。Java跨平台
4、其实就是基于相同的bytecode规范做不同平台的虚拟机,Java程序编译成bytecode后就可以在不同平台跑了。.net框架有IL(intermediate language),汇编是C/C+程序的中间表达方式,而bytecode可以说是Java平台的中间语言。高级语言解释程序高级语言解释程序(interpreter)l解释程序,也是一种翻译程序,将源程序作为输入并执行,边解释边执行。l与编译程序的不同 l不生成目标代码l能支持交互环境 解释解释执行执行计算结果计算结果源程序源程序交互交互,数据数据编译程序编译程序目标程序目标程序源程序源程序 内容内容l1.1 编译程序l1.2 编译过程l
5、1.3 编译程序的基本结构l1.4 编译程序的生成方法l1.5 编译技术的发展和应用1.2 编译过程编译过程l编译过程也是一种语言的翻译过程l类似于外文的翻译过程l如:It is a small world.l单词l语法l语义l修饰l中文l世界真小,人生何处不相逢,冤家路窄外文翻译与编译外文翻译与编译l英译与编译的比较(1)(1)识别出句子中的一个识别出句子中的一个 个单词个单词(2)(2)分析句子的语法结构分析句子的语法结构(3)(3)初步翻译句子的含意初步翻译句子的含意(4)(4)译文修饰译文修饰(5)(5)写出最后译文写出最后译文(1)(1)词法分析词法分析 (2)(2)语法分析语法分析
6、(3)(3)语义分析和语义分析和中间代码生成中间代码生成(4)(4)优化优化(5)(5)目标代码生成目标代码生成编译过程编译过程 图图词法分析词法分析语法分析语法分析语义分析及语义分析及中间代码生成中间代码生成代码优化代码优化目标代码生成目标代码生成词法规则词法规则 单词符号单词符号语法规则语法规则 语法单位语法单位语义审查语义审查 中间代码中间代码等价变换等价变换 更为高效更为高效机器指令代码机器指令代码编译过程编译过程l从概念上来讲,一个编译程序的整个工作过程是划分成若干个阶段进行的,每个阶段将源程序的一种表示形式转换成另一种表示形式,各个阶段进行的操作在逻辑上紧密连接在一起。l典型的划分
7、方法:一个编译过程划分成词法分析、语法分析、语义分析和中间代码生成,代码优化和目标代码生成五个阶段。l另外两个重要的工作:表格管理和出错处理与上述五个阶段都有联系1、词法分析阶段、词法分析阶段l从左到右一个字符一个字符地读入源程序,对构成源程序的字符流进行扫描和分解l根据语言的词法规则(单词符号的形成规则)l从而识别出一个个单词具有独立意义的单词(也称单词符号,简称符号)。词法分析词法分析 例例l程序段float r,h,s;s=2*3.1416*r*(h+r);l词法分析识别出以下单词符号:基本字 float标识符 r h s常数 2 3.1416运算符 *+界符 ();=语法分析语法分析
8、例例ls=2*3.1416*r*(h+r);ls 2*3.1416*r*(h+r)=是正确的 语法分析例之语法树语法分析例之语法树lid1=id2+id3*10经语法分析得知其c语言的3 语义分析及中间代码生成语义分析及中间代码生成l语义,对语言的语法单位赋予具体的意义l对每种语法单位进行静态 语义审查,分析其含义l用另一种语言形式来描述这种语义l比源语言更接近于目标语言的一种中间代码l如四元式l或直接用目标语言语义分析主要的任务语义分析主要的任务l完成静态语义审查和处理l上下文相关性审查l类型匹配审查l类型转换l如:s=2*3.1416*r*(h+r);l赋值语句的语义:计算赋值符号右边表达
9、式的值,送到赋值号左边的变量中。l检查赋值号左右两边的类型是否匹配l根据赋值语句的语义,将它翻译成四元式中间代码中间代码生成中间代码生成s=2*3.1416*r*(h+r);(1)(*,2,3.1416,T1)(2)(*,T1,r,T2)(3)(+,h,r,T3)(4)(*,T2,T3,T4)(5)(=,T4,-,s)4 代码优化代码优化l对前阶段产生的中间代码进行等价变换或改造l以期获得更高效的,即省空间和时间的目标代码l主要包括局部优化和循环优化等如如s=2*3.1416*r*(h+r);(1)(*,2,3.1416,T1)(2)(*,T1,r,T2)(3)(+,h,r,T3)(4)(*,
10、T2,T3,T4)(5)(=,T4,-,s)2,3.1416编译时已是已知编译时已是已知量量,可以先计算出来可以先计算出来(1)(*,6.2832,r,T2)(2)(+,h,r,T3)(3)(*,T2,T3,T4)(4)(=,T4,-,s)代码优化代码优化 例例t1=b*c t1=b*c t2=t1+0 t2=t1+t1t3=b*c a=t2t4=t2+t3a=t4目标代码生成目标代码生成 例例(*,id3,60.0,t1)(+,id2,t1,id1)movfid3,R2mulf#60.0,R2movfid2,R1addfR2,R1movfR1,id1编译过程编译过程 图图词法分析词法分析语法
11、分析语法分析语义分析及语义分析及中间代码生成中间代码生成代码优化代码优化目标代码生成目标代码生成词法规则词法规则 单词符号单词符号语法规则语法规则 语法单位语法单位语义审查语义审查 中间代码中间代码等价变换等价变换 更为高效更为高效机器指令代码机器指令代码6 表格管理表格管理l建立表格,登记源程序中的或编译过程中产生的一些信息l编译各阶段都涉及到构造、查找、修改有关表格中信息l如符号表l记录源程序中使用的名字l收集每个名字的各种属性信息l类型、作用域、分配存储信息7 错误处理错误处理l编译程序必须有广泛的程序查错能力l报告错误种类l出错位置l排错l恢复编译工作1.3编译程序结构编译程序结构(c
12、omponents)l5阶段对应5程序l词法分析程序l语法分析程序l语义分析程序中间代码生成程序l代码优化程序l目标代码生成程序l表格管理程序l出错处理程序编译各阶段编译各阶段l上图是指逻辑关系,不一定是时间上的先后关系l可按不同流程组织上述各阶段的工作,依赖于l编译过程对源程序扫描的遍数l各遍扫描所进行的工作l“遍遍”pass(趟趟)从头到尾扫描源程序或其等价的中间代码一遍,并完成加工处理工作的过程l一遍扫描l多遍扫描l少占空间,各遍功能独立单纯l增加I/O开销,降低开销l视面临的源语言特征,机器规模,设计目标等因素确定 内容内容l1.1 编译程序l1.2 编译过程l1.3 编译程序的基本结
13、构l1.4 编译程序的生成方法l1.5 编译技术的发展和应用1.4 编译程序的生成方法编译程序的生成方法l复杂的系统程序l生成编译程序,要考虑l源语言、目标语言的认真分析l设计编译算法l选择编译程序实现语言l机器语言、汇编语言l高级语言(开发效率高,易读易维护)l自动生成工具l源程序定义、机器语言描述-自动生成编译程序l词法分析自动生成工具LEXl语法分析自动生成工具YACClGCC(GUN Compiler Collection)Linux平台编译器的事实标准 内容内容l1.1 编译程序l1.2 编译过程l1.3 编译程序的基本结构l1.4 编译程序的生成方法l1.5 编译技术的发展和应用1
14、.5 编译技术的发展编译技术的发展l1954年世界上第一个高级语言编译器FORTRAN语言编译器问世,相应的一批编译系统开发成功。l随着编译技术的发展和社会对编译程序需求的不断增长,20世纪50年代末有人开始研究编译程序的自动生成工具,提出并研制编译程序的编译程序。它的功能是以任一语言的词法规则、语法规则和语义解释出发,自动产生该语言的编译程序。目前很多自动生成工具已广泛使用,如词法分析程序的生成系统LEX,语法分析程序的生成系统YACC等。l20世纪60年代起,不断有人使用自展技术来构造编译程序。自展的主要特征是用被编译的语言来书写该语言自身的编译程序。1971年,PASCAL的编译程序用自
15、展技术生成后,其影响就越来越大。l随着并行技术和并行语言的发展,处理并行语言的并行编译技术,将串行程序转换成并行程序的自动并行编译技术也正在深入研究之中。另外嵌入式应用迅速增长的需求,推动了交叉编译技术的发展.还有系统芯片设计方法和关键EDA技术的研究,也带动了专用语言VHDL等及其编译技术的不断深化。推动编译技术发展的因素推动编译技术发展的因素l语言范型(paradigms)(计算模式)l命令式(imperative language)l应用式(applicative)l基于规则的(rule-based)l面向对象的(object-oriented)l并行计算(parallel comput
16、ing)l体系结构 l万诺曼机体系结构l并行体系结构l嵌入系统 l编译程序执行环境l批处理l交互环境l嵌入系统环境 执行环境执行环境l批处理环境:将源程序作为整体处理l 排除程序错误不能依靠用户的外部帮助l交互环境:解释l 增量式编译l嵌入式系统环境:交叉编译l分布并行环境:并行编译l程序创建和测试环境:独立编译l 编译和调试同时设计考虑 第一章第一章 小结小结l主要内容l1 什么是编译程序l2 编译过程l3 编译程序的结构l本章没有难以理解的内容,重点对编译程序的功能和结构做一综述。l加强理解:编译程序各个成分在编译阶段的逻辑关系以及他们怎样作为一个整体完成编译任务的。第一次上机课第一次上机课lC语言l词法分析程序预备l实现:输入源程序符号串,识别出具有独立意义的单词符号,单词符号间以空格为分隔。