编译原理第五章语法制导翻译及中间代码生成.pptVIP

编译原理第五章语法制导翻译及中间代码生成.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理第五章语法制导翻译及中间代码生成

int GEN(int Op,int Arg1,int Arg2,int Result) 根据所给实参产生一个四元式:(Op,Arg1,Arg2,Result),且送入四元式表中,返回值为该四元式的序号。Arg1或Arg2为零时表示该参数缺省 简单算述表达式和赋值语句的翻译 1.Statement→AssignSt {} 2.AssignSt→Variable : = Expr { GEN(:=, $4.PLACE, 0 , $1.PLACE); } 3.Expr→Expr ?+? Expr { $$.PLACE = NewTemp(); GEN(+, $1.PLACE, $3.PLACE, $$.PLACE); } 4. | Expr ?*? Expr { $$.PLACE = NewTemp(); GEN(*, $1.PLACE, $3.PLACE, $$.PLACE); } 5. | ( Expr) { $$.PLACE = $2.PLACE; } 6. | identifier { $$.PLACE = Entry($1); } 7.Variable→ identifier { $$.PLACE = Entry($1); } 4. 1语义属性 1. Entry()的含义 2. 终结符identifier具有的属性为该变量的词文(标识符),由词法分析程序的yytext给出。 3. $$,$1,$2.…的含义 4. 每个非终结符的属性可以不止一个,可用一个结构来描述它的全部属性。 比如,Expr和Variable的属性至少有两个,故可定义 struct Attr_Of_Expr_Var{ int PLACE; //符号表中的序号或临时变量的编号 char Type; //表达式的类型 } 4. 2优先关系和结合规则 不难看出,前面所给文法是二义性的,且不能刻画各运算符的优先关系和结合规则。 如果我们能按某种规定(参阅5.10 节),赋予各运算符优先顺序和结合规则,那么就能对它所产生的句子进行有效的语法分析和翻译。 从所给属性文法的语义动作可以看出,Expr代表了一个变量(产生式6)或一个子表达式(产生式5)的运算(四元式)序列,该序列的运算结果存放于一个临时变量中,这个变量的编号将作为Expr的PLACE属性被传递给了Expr。 4.3表达式中的类型匹配问题 在上面的讨论中,我们未考虑表达式运算中的类型冲突问题。 许多语言允许混合运算,不过在运算前应先进行类型转换,使运算对象具有相同的类型。 因此,还应定义类型转换算符,以便产生对运算对象进行转换的四元式。例如,若仅考虑整型到实型的转换,则可定义运算符itr,相应的四元式(itr,A,0,T)的作用是把整型变量A转换为等值的实型变量T。 另外,为阅读上的直观性,在书写语义子程序时,我们用+r,*r表示实型运算符,用+i,*i表示整型运算符。 5. Expr→Expr+Expr的语义动作 { int T= NewTemp(); if($1.Type==i $3.Type==i) { GEN(+i, $1.PLACE, $3.PLACE, T); $$.Type=i; } else if($1.Type==r $3.Type==r) { GEN(+r, $1.PLACE, $3.PLACE, T); $$.Type=r; } else if($1.Type==i) /* $3.Type==r*/ else if($1.Type==i) { /* $3.Type==r*/ int U= NewTemp(); GEN(itr, $1.PLACE, 0, U ); GEN(+r, U, $3.PLACE, T); $$.Type= r ; } else { /*($1.Type==r $3.Type==i) */ int U=NewTemp(); GEN(itr, $3.PLACE, 0, U); GEN(+r, $1.PLACE, U, T); $$.Type= r; } $$.PLACE= T; } 简单算述表达式和赋值语句的翻译 1.Statement→AssignSt {} 2.AssignSt→Variable : = Expr { GEN(:=, $4.PLACE, 0 , $1.PLACE); } 3.Expr

文档评论(0)

sandaolingcrh + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档