第6章语法制导翻译和中间代码生成综述.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1 第6章 语法制导翻译和中间代码生成 6.1 语法制导翻译概述 6.2 符号表和常数表 6.3 中间代码 6.4 说明语句(简单变量)的翻译 6.5 整型算术表达式及赋值语句的翻译 6.6 混合型算术表达式及赋值语句的翻译 6.7 布尔表达式的翻译 6.8 标号和无条件转移语句的翻译 6.9 控制语句的翻译 if-then if-then-else while-do 复合语句 6.10 小结 2 ㈠语法分析和语义分析的区别 ①语法分析 利用产生式推导或归约,验证符号串是否为文法的一个句子,并没有考虑符号和符号串的意义。 ②语义分析 规定每个符号和符号串的意义,同时完成符号串所规定的语义动作,显然这是以语法正确为前提。 例文法G E→E(1)+T | T T→T(1)*F | F F→(E) | i | x | y i:语法分析认为i是一个终结符,代表标识符;而语义分析认为它不仅是一个标识符,还具有标识符名、种属和类型等。i可能是一个简单变量,也可能是一个标号。标识符名由单词二元式中的值给出,种属和类型可从符号表获取。 x:语法分析认为它是一个终结符,代表整常数;而语义分析认为它不仅是一个整常数,还具有值,值由单词二元式中的值给出。 3 y:语法分析认为y是一个终结符,代表实常数;而语义分析认为它不仅是一个实常数,还具有值,值由单词二元式中的值给出。 F:语法分析认为F是一个非终结符,代表语法单位因子,F由i、x、y或(E)归约而得;而语义分析认为F还具有值、类型等属性。为了保存值和类型,引入语义变量F.val、F.type。 T:语法分析认为T是一个非终结符,代表语法单位项,由F或T*F归约而得;而语义分析认为T还具有值、类型等属性。为了保存值和类型,引入语义变量T.val、T.type。 E:语法分析认为E是一个非终结符,代表语法单位算术表达式,由T或E+T归约而得;而语义分析认为E还具有值、类型等属性。为了保存值和类型,引入语义变量E.val、E.type。 +:语法分析认为它是一个终结符,代表算术加;而语义分析认为它可能是一个实数加运算符,也可能是一个整数加运算符,视运算对象而定。 *:语法分析认为它是一个终结符,代表算术乘;而语义分析认为它可能是一个实数乘运算符,也可能是一个整数乘运算符,视运算对象而定。 4 E→E(1)+T:在语法分析时认为它是一个算术表达式的产生式,而在语义分析时认为:应将E(1)的值(用E(1).val表示)加上T的值(用T.val表示),结果放在E.val中。若数据类型有实型和整型之分,在运算前还需检查它们的类型。若类型不同,根据语言的语义规定,或者拒绝运算,或者将它们转换成相同类型(例实型),然后再进行实数加运算。 T→T(1)*F:在语法分析时认为它是一个项的产生式,而在语义分析时认为:应将T(1)的值(用T(1).val表示)乘上F的值(用F.val表示),结果放在T.val中。若数据类型有实型和整型之分,在运算前还需检查它们的类型。若类型不同,根据语言的语义规定,或者拒绝运算,或者将它们转换成相同类型(例实型),然后再进行实数乘运算。 ㈡语义分析主要工作 ①建立符号表和常数表。 ②诊察和报告源程序中的语义错误。 ③根据语言的语义产生中间代码(或机器指令),或直接解释执行。 5 6.1 语法制导翻译概述 ㈠语法制导翻译方法简介 为每一个产生式配一个语义子程序。在语法分析过程中,当一个产生式获得匹配或用于归约时,此产生式相应的语义子程序进入工作,完成既定的翻译任务。 ㈡实现方法(以SLR分析器为例) SLR分析器是由工作栈(状态栈和符号栈)、分析表和总控程序三部分构成,只要适当修改工作栈和总控程序,就可将SLR分析器用于语义分析。 ①分析表不变 ②改造工作栈 为了保存语义信息,在状态栈、符号栈的基础上增加单词值(wval)栈和语义(semantic)栈。 状态栈(原有) 符号栈 (原有) 单词值栈(新增) 语义栈(新增) 6 状态栈(不变) 符号栈(不变) 增加单词值栈(wval),用于保存单词的值(字符串形式)。 增加语义栈(semantic) ,用于记录分析过程中需保留的语义值。例:值(semantic.val)、地址(semantic.addr)、种属(semantic.cat)、类型(semantic.type) 、…… 。 经改造后,工作栈如下所示: state symbol wval .val .addr .cat .type … Sm X …… X.val X.addr X.cat X.

文档评论(0)

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

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

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档