编译原理-上课课件第1章引论_第1页
编译原理-上课课件第1章引论_第2页
编译原理-上课课件第1章引论_第3页
编译原理-上课课件第1章引论_第4页
编译原理-上课课件第1章引论_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

编译原理赵曦1教材2《编译原理》

张晶

等编著哈尔滨工程大学出版社2011年第一版学科地位3编译原理是计算机专业的一门重要专业课,旨在介绍编译程序构造的一般原理和基本方法。虽然只有少数人从事编译方面的工作,但是这门课在理论、技术、方法上都对学生提供了系统而有效的训练,有利于提高软件人员的素质和能力。

学习《编译原理》的重要性4通过学习编译程序的构造原理和实现技术:可以了解编译程序本身的设计和实现技术;有助于提高对程序设计语言的理解及设计能力;提高元级程序的设计能力;提高大型软件的开发能力。课程教学内容的层次5了解♥熟悉♥♥掌握♥♥♥主要内容6第1章引论第2章文法和语言第3章词法分析第4章自顶向下的语法分析第5章自底向上的语法分析第6章自底向上的LR分析法第7章语法制导翻译和中间代码生成第8章运行时的存储组织第9章符号表第10章代码优化第11章目标代码生成第1章引论7♥8§1.1什么是编译程序§1.2编译程序的基本结构§1.3编译程序的组织§1.1什么是编译程序910世界上存在着多种语言,人与人为了交流,就需要建立各种语言之间的翻译。人与计算机之间的信息交流,同样存在一个翻译问题。计算机语言——机器语言人类语言——高级程序设计语言翻译是两者沟通的桥梁。编译是两者沟通的桥梁。11比较机器语言汇编语言高级语言硬件识别是唯一可以识别的语言不可识别不可识别是否可直接执行可直接执行不可,需汇编、连接不可,需编译/解释、连接特点面向机器占用内存少执行速度快使用不方便面向机器占用内存少执行速度快较为直观与机器语言一一对应面向问题/对象占用内存大执行速度相对慢标准化程度高便于程序交换,使用方便定位低级语言,极少使用低级语言,很少使用高级语言,种类多,常用12一、翻译程序将一种语言编写的程序等价转换成另一种语言编写的程序,实现上述功能的程序称为翻译程序。汇编程序就是翻译程序。源程序(汇编语言)翻译程序(汇编程序)目标程序(机器语言)二、编译程序13源程序(高级语言程序)编译程序(编译器)目标程序(机器语言)编译器的输入对象编译器的输出对象面向人的面向机器的把高级语言(源语言)书写的程序翻译成等价的低级语言(目标语言)的程序。编译程序是翻译程序的子集。三、编译和解释程序的执行过程14四、解释程序和编译程序的区别15功能工作结果实现技术上编译程序源程序的一个转换系统源程序的目标代码把中间代码转换成目标程序解释程序源程序的一个执行系统源程序的执行结果执行中间代码解释程序和编译程序的根本区别:是否生成目标代码。§1.2编译程序的基本结构16编译过程概述17编译程序完成从源程序到目标程序的翻译工作,是一个复杂的整体的过程。从概念上讲,一个编译程序的整个工作过程是划分成阶段进行的,每个阶段将源程序的一种表示形式转换成另一种表示形式,各个阶段在逻辑上是紧密连接的。1818英译与编译的比较(理解5个阶段)19识别出句子的一个个单词分析句子的语法结构初步翻译句子的含义译文修饰写出最后译文1.词法分析2.语法分析3.语义分析中间代码生成4.代码优化5.目标代码生成引例20英语句子:Iwishyousuccess.汉语句子:我希望你成功。(祝你成功。)

与此类似,编译程序将首先根据源语言的定义来对源程序进行分析,之后进行综合并得到与源程序等价的目标程序。一、词法分析21主要任务:从左至右一个字符一个字符地读入源程序,按照词法规则,扫描和分解出一个个单词。inta;

a=a+2;单词类型 单词值保留字int标识符(变量名)

a界符;标识符(变量名)

a算符(赋值) =标识符(变量名)a算符(加) +整数 2界符 ;这里所谓的单词是指逻辑上紧密相连的一组字符,这些字符具有集体含义。二、语法分析22主要任务:在词法分析的基础上将输出的单词流分解成各类语法单位,如“程序”、“语句”、“表达式”等。一般这种语法单位可表示成语法树。

语法分析所依据的是语言的语法规则,即描述程序结构的规则。通过语法分析确定整个输入串是否构成一个语法上正确的程序。三、语义分析23主要任务:审查源程序有无语义错误。按照语法树的层次关系和先后次序,逐个语句地进行语义处理。有的编译程序要对实数用作数组下标的情况报告错误;某些语言规定运算对象可被强制,那么当二目运算施于一整型和一实型时,编译程序应将整型转化成实型,而不能认为是源程序的错误;说明语句中是否有矛盾的类型说明;在过程调用中,实参与形参是否在个数、次序等方面对应。四、中间代码生成24主要任务:在语法分析和语义分析的基础上,将源程序变成一种内部表示形式,这种内部表示形式叫做中间代码。这一阶段不是编译程序必要阶段,通常为了处理上的方便,特别是为了便于代码的优化。它是介于源语言和目标语言之间的中间语言代码。目前,常见的形式有逆波兰式、三元式、四元式等。五、代码优化25主要任务:对前阶段产生的中间代码进行变换或进行改造,目的是使生产的目标代码更为高效,即省时间和省空间。

代码优化不是编译程序的必要阶段,它的最终目的是获得高质量的目标代码。六、目标代码生成26主要任务:如果采用了中间代码,那么它的主要任务就是将中间代码转换成等价的目标代码;如果不设置中间代码阶段,则在语法和语义分析阶段后直接产生目标代码。这是编译程序的最后阶段,它的工作与硬件系统结构和指令含义有关,这个阶段的工作很复杂,涉及硬件系统功能部件的运用、机器指令的选择、各类数据类型变量的存储空间分配以及寄存器的调度等。七、符号表管理27记录源程序中使用的名字;收集每个名字的各种属性信息:类型、作用域、分配存储信息Const1

常量 值:35Var1 变量 类型:实 层次:2八、出错处理 28检查错误;词法分析程序发现某单词的拼写错误;语法分析程序发现语法错误,如括号不配对;语义分析程序发现语法错误,如某运算符与其运算对象的类型不相容;报告出错信息;排错,恢复编译工作。§1.3编译程序的组织2930上一节给出了编译程序的各个组成部分之间的逻辑关系,那么,如何组织编译程序?一、前端与后端31编译的前端依赖于源语言,它由几乎独立于目标机的阶段或阶段的一部分组成。通常包括词法分析、语法分析、语义分析和中间代码生成,也包括与前端每个阶段相关的符号表和出错管理,某些与目标机无关的优化也可在前端完成。编译的后端依赖于目标机器,它一般独立于源语言而与中间语言有关。通常包括代码优化中涉及目标机的部分、代码生成和与这些阶段相关的符号表和出错管理。32把编译过程分为前端和后端的这种组织方式便于编译程序的移植,若要将编译程序移植到不同类型的机器,只需修改编译程序的后端即可。

也就是说,某一编译程序的前端加上相应不同的后端可以为不同的机器构成同一源语言的编译程序。二、遍33在编译过程中,对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程称为编译的一遍。

有很多不同的方式可以把编译器的阶段组成遍,一个编译过程可由一遍、两遍或多遍完

温馨提示

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

评论

0/150

提交评论