网站大量收购闲置独家精品文档,联系QQ:2885784924

[工学]编译原理第1章.ppt

  1. 1、本文档共62页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]编译原理第1章

编译原理 主讲教师:张小艳 Email:zhangxy@xust.edu.cn QQ:1161880978 第一章 绪论 程序设计语言分低级语言和高级语言两类 低级语言:机器语言、汇编语言等;其特点对计算机的依赖性强、直观性差、编写程序的工作量大,对程序设计人员要求较高。 高级语言:常用的有BASIC、FORTRAN、PASCAL、C、JAVA等。 但高级语言与机器之间有一“鸿沟”:机器不能理解高级语言! 方法:对程序进行翻译或进行解释。 翻译:在计算机中放置一能由计算机直接执行的翻译程序,它将某程序设计语言(源语言)所编写的程序(源程序)作为加工对象,将其翻译成为与之等价的另一种语言(目标语言)的程序(目标程序) 计算机执行某高级语言程序,需经两个阶段,即编译阶段和运行阶段。 在执行时,一般应有一些辅助子程序配合。如:数据格式转换子程序、标准函数、动态存储分配子程序等等,由它们构成的子程序库称为运行系统。 编译系统=编译程序+运行系统 3 其他面向特定应用领域的语言 1.2 语言之间的翻译 1.5 编译器的编写 思考题   ① 为什么需要编译程序?   ② 用源程序片段   if (a=b+1)    {b = a * a ;    … }…   为例,考虑编译过程中它可能的不同表示形式来理解编译各阶段的工作。   ③ 比较你所使用过的一些语言的编译程序:他们的编译速度,出错信息的可读性,有无优化选择等等。 id1∶=id2+id3*10 语法分析所依据的是语言的语法规则,即描述程序结构的规则。通过语法分析确定整个输入串是否构成一个语法上正确的程序。程序的结构通常是由递归规则表示的,例如,我们可以用下面的规则来定义表达式:  (1) 任何标识符是表达式。  (2) 任何常数(整常数、实常数)是表达式。  (3) 若表达式1和表达式2都是表达式,那么:表达式1+表达式2以及表达式1 * 表达式2都是表达式。 类似地,语句也可以递归地定义,如  (1) 标识符∶=表达式是语句。  (2) while(表达式)do语句和 if(表达式 )then语句 else语句都是语句。 词法分析和语法分析本质上都是对源程序的结构进行分析。但词法分析的任务仅对源程序进行线性扫描即可完成,比如识别标识符,因为标识符的结构是字母打头的字母和数字串,这只要顺序扫描输入流,遇到既不是字母又不是数字字符时,将前面所发现的所有字母和数字组合在一起而构成单词标识符。但这种线性扫描则不能用于识别递归定义的语法成分,比如就无法仅用线性扫描去匹配表达式中的括号。 语义分析   语义分析阶段的任务是审查源程序有无语义错误。源程序中有些语法成分,按照语法规则去判断,它是正确的,但它不符合语义规则。比如使用了没有声明的变量;或者给一个过程名赋值;或者调用函数时参数类型不合适或者参加运算的两个变量类型不匹配等等。比如下边的程序片段:   int arr[2],c;   c = arr1 * 10 ; 其中的赋值语句是符合语法规则的,但是因为没有声明变量arr1,而存在语义错。 一般,语义分析的工作还包括类型审查,类型提升以及为代码生成阶段收集类型信息. 比如审查每个算符是否实施于具有语言规范允许的运算对象,当不符合语言规范时,编译程序应报告错误。又比如对实数用作数组下标的情况报告错误。又比如某些语言规定运算对象可被强制,那么当二目运算施于一个整型量和一个实型量时,编译程序应将整型量自动转换成实型量而不能认为是源程序的错误,或者给出警告信息后将整型量自动转换成实型量。 假如在赋值语句sum∶=first+count*10中,算符*的两个运算对象分别是count和10,而count是实型变量,10是整型量。语义分析阶段进行类型审查之后,将整型量提升为实型量。在语法分析所得到的分析树上增加一个一目算符结点,这个结点的名称为inttoreal,表示进行将整型量变成实型量的语义处理 sum∶=first+count*10 count是实型变量 我们来总结一下语义分析主要的任务----   完成静态语义审查和处理   上下文相关性审查   类型匹配审查   类型转换 中间代码生成阶段   在进行了上述的词法分析,语法分析和语义分析阶段的工作之后,有的编译程序将源程序变成一种内部表示形式,这种内部表示形式叫做中间语言或中间代码。所谓“中间代码”是一种结构简单、含义明确的记号系统,这种记号系统可以设计为多种多样的形式,重要的设计原则为两点:一是容易生成;二是容易将它翻译成目标代码。很多编译程序采用了一种近似“三地址指令”的“四元式”中间代码,这种四元式的形式为: (运算符,

文档评论(0)

qiwqpu54 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档