part7语义分析与中间代码生成.pdf

  1. 1、本文档共69页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
语义分析的位置和作用 紧跟在语法分析和语法分析之后,编译程序要做的工 作就是进行静态语义检查和翻译。 编译器必须要检查源程序是否符合源语言规定的语法 和语义要求。这种检查称为静态检查,检查并报告程 序中某些类型的错误。 语法树 语法树 中间代码 记号流 语法分析器 类型检查器 中间表示 静态语义检查 静态语义检查通常包括: 类型检查:如果操作符作用于不相容的操作数,编译 器应该报错 控制流检查:引起控制流从某个结构中跳转出来的语 句必须能够决定控制流转向的目标地址 唯一性检查:有时,有的对象只能被定义一次。比如, 同一case语句的标号不能相同,枚举类型的元素不能 重复。 与名字相关的检查:有时候要求同一名字在特定位置 出现两次或多次 (如,标识结构的开始和结尾) 中间语言 源语言的中间表示方法 抽象语法树 后缀式 三地址代码 (包括三元式、四元式、间接三元式) DAG 图表示 后缀式 后缀式表示又称逆波兰表示法。 这种表示法是:把运算量 (操作数)写 面,把算符写在 后面 (后缀)。 一个表达式的后缀形式可以如下定义: 如果E是一个变量或常量,则E的后缀式是E 自身 如果E是E opE 形式的表达式,这里op是任何二元操作符,则E 1 2 的后缀式为E ’E ’op 。这里E ’和E ’分别是E 和E 的后缀式。 1 2 1 2 1 2 如果E是(E )形式的表达式,则E 的后缀式就是E 的后缀式 1 1 这种表示法用不着使用括号。 只要知道每个算符的目数,对于后缀式,无论从那一端进行 扫描,都能对它正确的进行唯一分解 后缀式 表达式翻译为后缀式的语义规则描述: 产生式 语义规则 E→E op E E.code := E .code || E .code || op 1 2 1 2 E→(E ) E.code := E .code 1 1 E→id E.code := id 其中E.code表示E的后缀式,op表示任何二元操作符, “||”表 示后缀形式的连接 图表示法 图表示法主要包括DAG( Directed Acyclic Graph )与抽象语法树 语法树描述了源程序的自然层次结构。DAG 以更紧凑的形式给出了相同的 信息。两者不同的是: 在一个DAG 中代表公共子表达式的结点具有多个父结点 在一颗抽象语法树中公共子表达式被表示为重复的子树。 assign assign a + a + * * * b uminus b uminus b uminus c c c a:= b*-c + b*-c

文档评论(0)

136****1820 + 关注
实名认证
内容提供者

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

认证主体李**

1亿VIP精品文档

相关文档

相关课程推荐