编译原理张晶版第一章概论详解.ppt

  1. 1、本文档共57页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理;开课目的;课程简介;课 程 简 介;内容简介 ; 第一章 概 论;1.1什么是编译程序;;;;Compiler;Compiler; ;Compiler;1.2 编译程序的基本结构 一段英文翻译成中文 需经下列步骤: 识别出句子中的单词 分析句子的语法结构 根据句子的含义进行 初步分析 对译文进行修饰 写出最后的译文;;一、词法分析 ;举例说明 Void jisuan( ) {int y,c,d; float x,a,b; x=a+b*50; y=c+)d*(x+b; };1.词法分析;二、语法分析;语法分析的方法: ——推导(derive)和归约(reduce) 推导——最左推导,最右推导 最右推导 最左归约 (x=a+b*50);A V=E;归约—最右归约,最左归约 A V=E x=E x=E+T x=T+T x=V+T x=a+T x=a+T*F x=a+F*F x=a+V*F x=a+b*F x=a+b*C x=a+b*50 最左推导 最右归约;C语言语句 y=c+)d*(x+b 分析过程: A V=E V=E+T V=E+F V=E+V V=E+b V=T+b V=T*F+b V=T*V+b V=T*x+b 无法得到该句 故,该C语言语句是错误的; 具体地说,语法分析是在记号流的基础上建立一个层次结构——建立语法树 语法分析过程也可以用一棵倒着的树来表示 这棵树叫语法树,比如上述程序段中的单词序列:id1=id2+id3*60经语法分析得知其是PASCAL语言的“赋值语句”,表示成如下所示形式。 ; ;第一章 概 论 ;三、语义分析、生成中间代码;Compiler;符 号 表 ;总结一下语义分析主要的任务:    完成静态语义审查和处理   上下文相关性审查   类型匹配审查   类型转换 ;Compiler;四、代码优化 ;试图改进中间代码,以产生执行速度较快占用内存空间少的机器代码 原则:等价变换 主要方面:公共子表达式的提取、合并已知量、删除无用语句、强度削弱、循环优化等优化工作;五、目标程序生成; 由中间代码很容易生成目标程序(地址指令序列)。这 部分工作与机器关系密切 ,所以要根据机器进行。在做这 部分工作时(要注意充分利用累加器),也可以进行优化 处理。;1.3.2 编译程序构造 ; 编译程序构造;Compiler;Compiler;6、表格管理;符号表管理;常数表与标号表;入口名表;7、错误处理;上一遍的结果是下一遍的输入,最后一遍生成目标程序;Compiler; 一遍扫描 —注:遍与阶段的含义毫无关系 多遍扫描 —优点:节省内存空间,提高目标代码质量,使编译的逻辑结构清晰 —缺点:编译时间较长 —注:在内存许可情况下,遍数尽可能少为好;三、前端和后端;第一章 概 论 ;第一章 概 论 ;第一章 概 论 ;第一章 概 论 ;四、 编译程序的前后处理器 ;1.4 编译程序的生成 ;回顾:;【思考题】   ① 为什么需要编译程序?   ② 用源程序片段   if (a=b+1)    {b = a * a ;    … }…   为例,考虑编译过程中它可能的不同表示形式来理解编译各阶段的工作。 ③ 比较你所使用过的一些语言的编译程序:他们的编译速度,出错信息的可读性,有无优化选择等等。

文档评论(0)

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

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

1亿VIP精品文档

相关文档