语法制导翻译.ppt

  1. 1、本文档共47页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
三元式 为了节省临时变量的开销,有时也可采用一种三元式结构来作为中间代码,其一般形式为 (i) (op,arg1,arg2) 其中,(i)为三元式的编号,也代表了该式的运算结果;op,arg1,arg2的含义与四元式类似,区别在于arg可以是某三元式的序号,表示用该三元式的结果作为运算对象。例如,对于赋值语句a:=-b*(c+d),若用三元式表示,则可写成 ① (U_minus, b, - ) ② ( + , c, d ) ③ ( * , ①, ② ) ④ ( := , ③, a ) 式①中的运算符U_minus表示一元减运算。 第三十页,共四十七页,2022年,8月28日 翻译程序中使用的辅助函数 我们以算术表达式到三元式的翻译为例,说明如何为各产生式设计语义动作。为此,先介绍若干翻译过程中要使用的辅助函数: ⒈int LookUp(char *Name)—以Name查符号表,若查到则返回相应登记项的序号(≥1),否则返回0。 ⒉int Enter(char* Name)—以Name为名字在符号表中登录新的一项,返回值为该项的序号。 ⒊int Entry(char *Name)—以Name为名字查、填符号表: int Entry(char *Name){int i=LookUp(Name); if(i) return i;else return Enter(Name); } 第三十一页,共四十七页,2022年,8月28日 翻译程序中使用的辅助函数(续) 注意,在实际的编译系统中,还应区分当前是否在处理说明部分:若是说明部分,则查表时i应为0(否则Name被重复定义);若非,则i不能为0(否则Name尚未被定义)。 ⒋int Trip(int op,int arg1,int arg2)—根据给定的参数产生一个三元式 (op,arg1,arg2) 并将它送入三元式表中,其返回值为表中序号。为区分参数arg表示的是三元式还是变量,约定当arg<0时表示三元式序号;arg>0表示变量在符号表中登记项序号;arg=0表示参数为空。 第三十二页,共四十七页,2022年,8月28日 三元式和四元式之异同 在产生式8中,终结符iden的属性是它的词文yytext,用$1表示。每个非终结符都有一个属性,代表以该符号为根的语法树的一个子树的运算结果,该属性的取值可以是整型数,或为一三元式的序号,或为符号表项的序号。 比较三元式和四元式这两种表示方法可以看出,无论在一个三元式序列还是四元式序列中,各个三元式或四元式都是按相应表达式的实际运算顺序出现的。其次,对同一表达式而言,所需的三元式或四元式的个数一般是相同的。 三元式比四元式更能节省存储空间,但不利于优化.可通过引入一些表格提高使用三元式的效率(略,见P200-201) 第三十三页,共四十七页,2022年,8月28日 语法制导翻译 第一页,共四十七页,2022年,8月28日 5.1 引言 在早期的一些编译程序中,是在语法分析的基础上根据源程序中各语法成份的语义,直接产生机器语言或汇编语言形式的目标代码。 现在的编译系统一般都将经过语法分析的源程序先翻译为某种形式的中间语言代码,然后再将其翻译为目标代码。 优点: 使编译程序各组成部分功能更单一; 使得编译程序的逻辑结构更为清晰,从而使编译程序更易于编写与调整;同时为代码优化和程序的可移植性提供了条件 本章要讨论的中间代码生成,是指把单词符号串形式的源程序转换为另一种等价的便于代码优化处理和目标代码生成表示。 目前常见的中间语言有逆波兰表示、三元式、四元式等等。 中间代码生成与语言的语义密切相关,目前采用语法制导翻译来描述语义。 方法:对文法中的每个产生式都附加一个语义动作或语义子程序, 语法分析程序除执行相应的语法分析动作外,还要执行相应的语义动作或调用相应的语义子程序。 第二页,共四十七页,2022年,8月28日 5.1 引言(续) 这种模式既把语法分析与语义处理分开,又令其平行地进行,让其在同一遍扫描中同时完成语法分析和语义处理两项工作。 由此可见,抽象文法符号的具体语义信息,是在与语法分析同步的语义处理过程中获取和加工的。 文法符号X的语义信息我们称之为语义属性或简称为属性(Attributes)。 我们用形如X.ATTR的记号来表示文法符号X的相关语义属性。 如果一个文法符号X在一产生式中多次出现,为了在语义上能够对其进行区分,可添加不同的上标。 第三页,共四十七页,2022年,8月28日 文法符号及其语义属性 文法符号X的语义信息我们称之为语义属性或简称为属性(Attributes)。 我们用形如X.AT

文档评论(0)

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

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

1亿VIP精品文档

相关文档