17thCh7语义分析和中间代码产生II2009Spring.pptVIP

17thCh7语义分析和中间代码产生II2009Spring.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文档。上传文档
查看更多
* * 下面要讨论的是只含整型变量的简单赋值句的翻译。它的文法描述: A?i:=E E?E+E|E*E|-E|(E)|i (7.1) 非终结符A代表“赋值句”。该文法虽然是一个二义性文法,但接受通常对于算符的结合性和优先级的规定,即二义性可以克服。 NEWTEMP: 函数过程。每次调用时,它都回送一个代表新临时变量名的整数码作为函数值。 ENTRY(i):函数过程。 E.PLACE: 和非终结符E相联系的语义变量,它表示存放E值的变量名在符号表的入口或者整数码(若为临时变量)。 GEN(OP,ARG1,ARG2,RESULT): 语义过程,把四元式(OP,ARG1,ARG2,RESULT)填入四元式表。 A?i:=E {GEN(:=, E.PLACE, _, ENTRY(i))} E?E(1)+E(2) {E.PLACE:=NEWTEMP; GEN(+, E(1).PLACE, E(2).PLACE, E.PLACE)} (3) E?E(1)*E(2) {E.PLACE:=NEWTEMP; GEN(*, E(1).PLACE, E(2).PLACE, E.PLACE)} (4)E?-E(1) {E.PLACE:=NEWTEMP; GEN(@, E(1).PLACE, _, E.PLACE)} (5)E?(E(1)) {E.PLACE:=E(1).PLACE} (6)E?i {E.PLACE:= ENTRY(i) } 示例 A := - B * ( C + D ) E E E E E E E A 1 2 3 4 5 6 7 8 输入 栈 PLACE 四元式 A:=-B*(C+D) -B*(C+D) B*(C+D) *(C+D) *(C+D) i:= i:=- i:=-i i:=-E i:=E i:=E* i:=E*( i:=E*(i i:=E*(E i:=E*(E+ i:=E*(E+i i:=E*(E+E *(C+D) (C+D) C+D) +D) +D) D) ) ) ) i:=E*(E i:=E*(E) i:=E*E i:=E A :=-B*(C+D) i A A_ A__ A__B A__B A_T1 A_T1_ A_T1__ A_T1__C A_T1__C A_T1__C_ A_T1__C_D A_T1__C_D A_T1__T2 A_T__T2_ A_T1_T2 A_T3 (@, B, _, T1) (+, C, D, T2) (*, T1, T2, T3) (:=, T3, _, A) 前面假定了所有i都是整型。实际上,在一个表达式中可能出现各种不同类型的变量和常数。编译程序或者拒绝混合运算,或者产生有关类型转换的指令。 例如:令文法7.1允许混合类型。 那么,在进行混合运算时,首先要将整型量转换为实型量。而要进行转换,其前提是对每一个VN必须有类型信息语义变量—E.TYPE。 因此,对应的产生式要附加关于E.TYPE的语义规则。 语义规则: { IF E(1).TYPE = int AND E(2).TYPE = int THEN E.TYPE := int ELSE E.TYPE := r} 语义动作的增加,意味着语义子程序的修改,必要时能够产生对运算量进行类型转换的四元式。 ( itr, A1, _, T) 将整型量A1转换成实型量T。 输入串为 X := Y + I * J X,Y为实型,I,J 为整型。 四元式: ( *i , I , J , T1) ( itr , T1, _ , T2) ( +r, Y , T2 , T3) ( :=, T3 , _ , X) 运算符要指出相称的类型,说明是定点还是浮点运算。 *i 关于产生式 E ? E(1) op E(2) 在上述语法规则中,非终结符E的语义值E.TYPE必须保存在翻译栈中。 如果运算量类型增多,语义子程序必须区别的情形很快增多,从而使语义子程序累赘不堪。 布尔表达式E是由布尔算符(∧,∨,┐)作用于布尔变量或关系表达式而形成的。 关系表达式形式 E1 rop E2 rop是关系算符,E1和E2是算术表达式。 文法: E?E∧E|E∨E|┐E|(E)|i|i rop i (7.2) 布尔算符的优先顺序:┐,∧,∨

文档评论(0)

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

分享好文档!

1亿VIP精品文档

相关文档