《语法制导翻译和中间代码生成.ppt

  1. 1、本文档共82页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
注:上面的翻译质量并不高,可以采取某种优化措 施: 例如: 对A∨B 若已知A的值是1,那么B的值就不需要知道就能得出A∨B=1; 可以表示为:IF A THEN TRUE ELSE B. 对A∧B 若已知A的值是0,那么B的值就不需要知道就能得出A∧B=0; 可以表示为:IF A THEN B ELSE FALSE 对┐A ; 可以表示为:IF A THEN FALSE ELSE TRUE Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. 五、控制语句中布尔式的翻译 1、 控制语句中的布尔式并不需要计算表达式的值,只用if-then-else来解释?,?,?,以来控制程序流向。 if E then S1 else S2 Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. 2、控制语句中布尔式E翻译成的四元式为以下三种: (jnz,A1,_,P) If A1 then goto P (jθ,A1, A2,P) If A1θA2 then goto P (j, _, _ ,P) Goto P 注:这些四元式都是转移四元式,其中P为出口的四元式序号。与E的真假值相对应的分别为“真出口”和“假出口”两类四元式。 Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. 例如:把语句if A∨BD then S1 else S2 翻译成 四元式 解: (1)(jnz,A,_,(5)) ;真出口;若A为真,执行S1代码 (2)(j,__,(3)) ;若A为假,看∨右边的表达式值 (3)(j,B,D,(5)) ;真出口; ∨右边的表达式值为真 (4)(j,_,_,(P+1)) ;假出口; ∨右边的表达式值为假 (5) S1语句的第一个四元式 …… (P)(j,_,_,(q)) ;执行完S1代码后跳过S2代码段 (p+1) S2语句的第一个四元式 …… (q)此语句的后继语句 Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. 注:1、上面的1~4式是由布尔式“A∨BD”产生的中间代码,但它们和逻辑演算中的翻译不同,消除了布尔运算,变成转移四元式。 2、翻译时每个布尔量是译为两个二元式的,但有些并不必要,所以可以在后续阶段进行优化。 3、在自下而上的分析过程中,一个布尔式的真假出口的转向序号不可能在产生转移四元式时就填上。此时将待填的转移四元式暂时保留,等出口明朗了,在进行回填。 Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. 3、对文法的改写 原G(B): E ?E∧E | E∨E | ┐E | (E) | i | Ea rop Ea 由于产生式E ? E(1)∨E(2)在E(1)?i归约时翻译成两个四元式,一个表示“真”转移,一个表示“假”转移; “假”转移要转到“∨”号后,即读完“∨”就可以回填假出口,所以可以进行产生式的改写。 E ? E(1)∨E(2)改写为E ? E0E(2) , E0? E(1)∨ E ? E(1)∧E(2)改写为E ? EAE(2) , EA? E(1)∧ Evaluation only. Created with Aspose.S

文档评论(0)

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

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

1亿VIP精品文档

相关文档