《编译原理实践及应用》第1章编译原理概述精品.ppt

《编译原理实践及应用》第1章编译原理概述精品.ppt

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

* * * * * * * * * * * * * * * * 统计信息,用于优化 * * * * * * * * * * * * * * * * * * * * * * * 第*页 例:对赋值语句: id1:=int1 + id2 * id3 + id2 * id3 ???? 1. 检查result、B、C是否定义、类型 2. 生成中间代码 (运算符,运算对象1,运算对象2,结果) (*, id2, id3, T1) (+, int1, T1, T2) (*, id2, id3, T3) (+, T2, T3, T4) (:=, T4, _, id1) id1:=int1 + id2 * id3 + id2 * id3 * 第*页 第四阶段: 代码优化 任务:对已产生的中间代码进行加工变换,使生成的目标代码更为高效(时间和空间)。 优化方法包括:公共子表达式的提取、循环优化、删除无用代码等。 代码的优化依据的是程序的等价变换规则。 序号 四元式 1 (*, id2, id3, T1) 2 (+, int1, T1, T2) 3 (*, id2, id3, T3) 4 (+, T2, T3, T4) 5 (:=, T4, _, id1) 序号 四元式 1 (*, id2, id3, T1) 2 (+, int1, T1, T2) 3 (+, T2, T1, id1) * 第*页 第五阶段:目标代码的生成 任务:把中间代码(或经优化的中间代码)变换成特定机器上的低级语言代码。 依赖于机器的硬件系统结构和机器指令的含义 目标代码可以是:绝对指令代码、可重定位的指令代码、汇编指令代码 序号 四元式 1 (*, id2, id3, T1) 2 (+, int1, T1, T2) 3 (+, T2, T1, id1) (1)mov AX, id2 (2)mul AX, id3 (3)mov BX, AX (4)add AX, int1 (5)add AX, BX (6)mov id1, AX * 第*页 1.2编译程序的结构 由左图可以看出,词法分析是实现编译器的基础,语法分析是实现编译器的关键。 因此按照这个顺序来实现编译器 每一步的实现都依赖于一定的理论基础。 数学,尤其是离散数学是程序设计方法学的理论基础 * 第*页 1.2 编译阶段的组合 几个概念 遍:对源程序或源程序的中间结果从头到尾扫描一次,并作有关的加工处理,生成新的中间结果或目标程序。 编译前端:主要指与源语言有关,与目标语言无关的部分,通常包括词法分析、语法分析、语义分析和中间代码生成,与机器无关部分的代码优化 编译后端:指与目标机器有关的部分。如与机器有关的优化、目标代码生成 * 第*页 编译阶段的组合 * 第*页 为什么生成中间代码 * 第*页 1.2 编译程序的结构(续) (1) 记号(token) 当扫描程序将字符收集到一个记号中时,它通常是以符号表示这个记号;这也就是说,作为一个枚举数据类型的值来表示源程序的记号集。 编译程序中的主要数据结构: * 第*页 编译程序中的主要数据结构 (2) 语法树(syntax tree) 如果分析程序确实生成了语法树,它的构造通常为基于指针的标准结构,在进行分析时动态分配该结构,则整棵树可作为一个指向根节点的单个变量保存。结构中的每一个节点都是一个记录,它的域表示由分析程序和之后的语义分析程序收集的信息。 * 第*页 (3) 符号表(symbol table) 这个数据结构中的信息与标识符有关:函数、变量、常量以及数据类型。符号表几乎与编译器的所有阶段交互:扫描程序、分析程序或将标识符输入到表格中的语义分析程序;语义分析程序将增加数据类型和其他信息;优化阶段和代码生成阶段也将利用由符号表提供的信息选出恰当的代码。因为对符号表的访问如此频繁,所以插入、删除和访问操作都必须比常规操作更有效。尽管可以使用各种树的结构,但杂凑表却是达到这一要求的标准数据结构。有时在一个列表或栈中可使用若干个表格。 编译程序中的主要数据结构: * 第*页 (4) 常数表(literal table) 常数表的功能是存放在程序中用到的常量和字符串,因此快速插入和查找在常数表中也十分重要。但是,在其中却无需删除,这是因为它的数据全程应用于程序而且常量或字符串在该表中只出现一次。 编译程序中的主要数据结构: * 第*页 (5) 中间代码(intermediate code) 根据中间代码的类型(例如三元式代码)和优化的类型,该代码可以是文本串的数组、临时文本文件或是结构的连接列表。对于进行

文档评论(0)

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

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

1亿VIP精品文档

相关文档