第4章 语义分析与中间代码生成.ppt

  1. 1、本文档共145页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章 语义分析和中间代码生成 4.1 概述 4.2 属性文法 4.3 几种常见的中间语言 4.4 表达式及赋值语句的翻译 4.5 控制语句的翻译 *4.6 数组元素的翻译 *4.7 过程或函数调用语句的翻译 *4.8 说明语句的翻译 *4.9 递归下降语法制导翻译方法简介 4.1 概 述 4.1.1 语义分析的概念 语法分析: 在编译时对符合语法结构的源程序内部的逻辑含义加以分析,即审查每个语法成分的静态语义(动态语义检查在程序运行时进行 )。如果静态语义正确,则生成与该语言成分等效的中间代码,或者直接生成目标代码。 静态语义检查: 是在编译时完成的,它涉及以下几个方面: (1) 类型检查,如参与运算的操作数其类型应相容。 (2) 控制流检查,用以保证控制语句有合法的转向点。 (3) 一致性检查,如在相同作用域中标识符只能说明一次、case语句的标号不能相同等。 属性文法: 语义分析阶段只产生中间代码,语义的形式化描述是非常困难的,目前较为常见的是用属性文法作为描述程序语言语义的工具,并采用语法制导翻译的方法完成对语法成分的翻译工作。 4.1.2 语法制导翻译方法 语法制导翻译方法: 就是为每个产生式配上一个翻译子程序(称语义动作或语义子程序),并在语法分析的同时执行这些子程序。 语义动作: 是为产生式赋予具体意义的手段,它一方面指出了一个产生式所产生的符号串的意义,另一方面又按照这种意义规定了生成某种中间代码应做哪些基本动作。 在语法分析过程中,当一个产生式获得匹配(对于自上而下分析)或用于归约(对于自下而上分析)时,此产生式相应的语义子程序就进入工作,完成既定的翻译任务。 语法制导翻译分为自下而上语法制导翻译和自上而下语法制导翻译。 可拓展LR分析器能力,实现自下而上语法制导翻译 使LR分析器在用某个产生式进行归约的同时调用相应的语义子程序进行有关的翻译工作; 每个产生式的语义子程序执行之后,某些结果(语义信息) 作为此产生式的左部符号的语义值暂时保存下来,以便以后语义子程序引用这些信息。扩充原LR分析器的分析栈以便能够存放与文法符号相对应的语义值。扩充后的分析栈如图4–1所示。 例子: val[TOP]表示放在语义栈顶的值 产生式 语义动作 (0) S→E print val[TOP] (1) E→E(1)+E(2) val[TOP+2]=val[TOP]+val[TOP+2] (2) E→E(1)*E(2) val[TOP+2]=val[TOP]*val[TOP+2] (3) E→(E(1)) val[TOP+2]= val[TOP+1] (4) E→i val[TOP]=lexval (注:lexval为i的整型内部值) 这个文法的LR分析表见表3.20。 表4.1则给出了根据表3.20用LR语法制导翻译方法得到的表达式7+9*5#的语义分析和计值过程。 图4–2表示算术表达式7+9*5#的语法树及各结点值。 4.2 属 性 文 法 属性文法是在基础文法的基础上,附加上文法符号的属性计算规则形成的文法。属性文法可用作语言翻译动作的高层描述。 4.2.1 文法的属性 属性: 是指与文法符号的地址、类型和值等有关的一些信息,在编译中用属性描述处理对象的特征。 例如,判断变量X的类型是否匹配,要用X的数据类型来描述;判断变量X是否存在,要用X的存储位置来描述;而对X的运算,则要用X的值来描述;因此,语义分析阶段引入X的属性,如X.type、X.place、X.val等来分别描述变量X的类型、存储位置以及值等不同的特征。 文法符号的属性可分为继承属性与综合属性两类。 继承属性用于“自上而下”传递信息。继承属性由相应语法树中结点的父结点或兄弟节点属性计算得到,即沿语法树向下传递,由根结点到分枝(子)结点,它反映了对上下文依赖的特性。继承属性可以很方便地用来表示程序语言上下文的结构关系。 综合属性用于“自下而上”传递信息。综合属性由相应语法分析树中结点的分枝结点(即子结点)属性计算得到,其传递方向与继承属性相反,即沿语法分析树向上传递,从分枝结点到根结点。 4.2.2 属性文法 属性文法: 在语言文法的基础上,附加上文法符号的属性计算规则形成的文法即属性文法。属性文法也是一种翻译文法,属性有助于更详细地指定文法中的代码生成动作。 例1,简单算术表达式求值的属性文法如下: 产生式 语义规则 (1) ?S→E print

文档评论(0)

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

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

1亿VIP精品文档

相关文档