- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第一章 引论 丁志军 电信大楼507房间dingzj2002@163.com 内容线索 什么叫编译程序 编译过程概述 编译程序的结构 编译程序的生成 总结 程序语言技术的发展 程序的执行方式 高级语言程序通常采用解释方式和翻译方式两种方式执行 解释程序和编译程序 解释程序和编译程序的区别 编译程序的分类 依据编译程序的不同用途和侧重,可分类为: 诊断型编译程序 优化型编译程序 交叉型编译程序 可变目标型编译程序 编译技术的发展 在1954年至1957年期间,IBM的John Backus带领的一个研究小组对FORTRAN语言及其编译器的开发 将算术公式翻译成机器代码。 Noam Chomsky 开始了自然语言结构的研究。他的发现最终使得编译器结构异常简单 70年代,有穷自动机和形式语言的研究,促进了编译器的发展 Steve Johnson为Unix系统编写了Yacc (yet another compiler- compiler)。 Mike Lesk为Unix系统开发的 Lex 至今已形成一套比较成熟、系统的理论与方法及开发环境,但并行编译、嵌入式应用的交叉编译等仍在研究和发展中。 内容线索 什么叫编译程序 编译过程概述 编译程序的结构 编译程序的生成 总结 编译过程概述 掌握编译过程的五个基本阶段,是我们学习编译原理课程的基本内容,把编译的五个基本阶段与英译中的五个步骤相比较,有利于对编译过程的理解: 词法分析示例 例:一个C源程序片段: int a; a=a+2; 词法分析后返回(如右图): 语法分析 语法分析程序又称识别程序。 任务:读入由词法分析程序识别出的符号,根据给定语法规则,识别出各个语法单位(如:短语、子句、语句、程序段、程序),并生成另一种内部表示。 输入:由词法分析程序识别出并转换的符号 输出:另一种内部表示,如语法分析树或其它中间表示。 语法规则通常用上下文无关文法描述。 方法:递归子程序法、LR分析法、优先分析法。 例:id1:=id2+id3*10 规则 赋值语句::=标识符“:=”表达式 表达式::=表达式“+”表达式 表达式::=表达式“*”表达式 表达式::=“(”表达式“)” 表达式::=标识符 表达式::=整数 表达式::=实数 例:id1:=id2+id3*10 的语法树 语义分析 对语法分析树或其他内部中间表示进行静态语义检查,如果正确则进行另一方面的工作,即进行中间代码的翻译。 按照语法树的层次关系和先后次序,逐个语句地进行语义处理。 主要任务: 进行类型审查,审查每个算符是否符合语言规范,不符合时应报告错误。 类型匹配 类型转换 语义分析示例 例: Program p(); Var rate:real; procedure initial; … position := initial + rate * 60 /* error */ /* error */ /* warning */; 插入语义处理结点的语法树 中间代码 中间代码是一种独立于具体硬件的记号系统,或者与现代计算机的指令形式有某种程度的接近,或者能比较容易地变换成机器指令。 任务:将各类语法单位,如“表达式”、 “语句”、“程序”等翻译为中间代码序列。 输入:句子 输出:中间代码序列 中间代码的形式:常见的有四元式、三元式和逆波兰式等 方法:语义子程序;DAG图,语法制导翻译 对于源程序sum:= first + count * 10可以生成如下所示的四元式: (1) (inttoreal , 10 , - , t1 ) (2) ( * , id3 , t1 , t2 ) (3) ( + , id2 , t2 , t3 ) (4) ( := , t3 , — , id1 ) 其中:id1、id2、id3分别表示sum、first、count的机器内部表示,t1、t2、t3是临时生成的名字,表示中间运算结果。 例2:C语言的源程序a = b*c + b*d 的三地址序列(赋值语句形式的四元式): (1) t1 := b*c (2) t2 := b*d (3) t3 := t1 + t2 (4) a := t3 优化 优化的任务在于对前段产生的中间代码进行加工,把它变换成功
文档评论(0)