thCh语义分析和中间代码产生_第1页
thCh语义分析和中间代码产生_第2页
thCh语义分析和中间代码产生_第3页
thCh语义分析和中间代码产生_第4页
thCh语义分析和中间代码产生_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、NEWTEMP: 函数过程。每次调用时,它都回送一个代表新临时变量名的整数码作为函数值。ENTRY(i):函数过程。E.PLACE: 和非终结符E相联系的语义变量,它表示存放E值的变量名在符号表的入口或者整数码(若为临时变量)。GEN(OP,ARG1,ARG2,RESULT): 语义过程,把四元式(OP,ARG1,ARG2,RESULT)填入四元式表。(1)Ai:=E GEN(:=, E.PLACE, _, ENTRY(i)(2)EE(1)+E(2) E.PLACE:=NEWTEMP; GEN(+, E(1).PLACE, E(2).PLACE, E.PLACE)(3) EE(1)*E(2)

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)Ei E.PLACE:= ENTRY(i) 示例A := - B * ( C + D )EEEEEEEA12345678输入栈PLACE四元式A:=-B*(C+D)-B*(C+D)B*(C+D)*(C+D)*(C+D)i:=i:=-i:=-ii:=-Ei:=Ei:=E*i:=E*(i:=E*(ii:=E*(

3、Ei:=E*(E+i:=E*(E+ii:=E*(E+E*(C+D)(C+D)C+D)+D)+D)D)i:=E*(Ei:=E*(E)i:=E*Ei:=EA:=-B*(C+D)iAA_A_A_BA_BA_T1A_T1_A_T1_A_T1_CA_T1_CA_T1_C_A_T1_C_DA_T1_C_DA_T1_T2A_T_T2_A_T1_T2A_T3(, B, _, T1)(+, C, D, T2)(*, T1, T2, T3)(:=, T3, _, A)前面假定了所有i都是整型。实际上,在一个表达式中可能出现各种不同类型的变量和常数。编译程序或者拒绝混合运算,或者产生有关类型转换的指令。例如:令文法

4、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 * JX,Y为实型,I,J 为整型。四元式: ( *i , I ,

5、 J , T1) ( itr , T1, _ , T2) ( +r, Y , T2 , T3) ( :=, T3 , _ , X)运算符要指出相称的类型,说明是定点还是浮点运算。*i关于产生式 E E(1) op E(2) 在上述语法规则中,非终结符E的语义值E.TYPE必须保存在翻译栈中。 如果运算量类型增多,语义子程序必须区别的情形很快增多,从而使语义子程序累赘不堪。布尔表达式E是由布尔算符(,)作用于布尔变量或关系表达式而形成的。关系表达式形式 E1 rop E2rop是关系算符,E1和E2是算术表达式。文法: EEE|EE|E|(E)|i|i rop i (7.2)布尔算符的优先顺序:

6、,。、服从左结合。所有关系算符的优先级相同,高于任何布尔算符,低于任何算术算符。关系算符不得结合,如 ABC不合法。布尔表达式E在语言中的用途: 计算逻辑值 X:=ABD 条件表达式 WHILE ABD DO S IF ABD THEN S1 ELSE S2布尔表达式的求值1 通常算法:与算术表达式的计算过程一样,一步一步地计算出各部分的值,进而计算出整个表达式的值。2 采用优化措施 AB if A then true else B AB if A then B else false A if A then false else true说明上述两种计算方法对于不包含布尔函数调用的式子是没有什

7、么差别的。仅当遇到布尔函数调用并且这种函数调用会引起副作用时,上述两种算法不等价。对于第一种方法而言,可以如同翻译算术表达式一样来翻译布尔表达式。ABC=D 翻译成 = C D T1 B T1 T2 A T2 T3 第二种方法是本节主要内容,下面将详细讨论。 一.IF语句的四元式结构 二.翻译的困难和解决办法 三.E的文法和语义子程序 四.例例 IF ABD THEN S1 ELSE S2E的结构从整体上,E对外只能转向两个目标。E转向E为假时的目标转向E为真时的目标(1) (jnz,A,_,5)(2) (j,_,_,3)(3) (j,B,D,5)(4) (j,_,_,p+1)(5) (p)(

8、p+1)(q)S1(j,_,_,q)S2下一语句 1.困难 转移的目标在对它的引用之后才出现; (j,_,_,0) E可以很复杂,上面的情况可以频繁出现。(1) (jnz,A,_,5)(2) (j,_,_,3)(3) (jEEEE|E|(E)|i|i rop i (7.3) G2 E-E E|EE|E|(E)|i|i rop i E-E E-E (7.4) 2.语义动作(1)(2 )(1)(1)(1)(2)(1)(.:;.:1;(,( ), _,0);( , _, _,0).:;.:1;(,(),(),0);( , _, _,0).:.;.:.(1)(2)(3)()(4)E TCNXQ E F

9、CNXQGENjnz ENTRY iGENjE TCNXQ E FCNXQGENjnop ENTRY iENTRY iGENjE TCETC E FCEFCEiEirop iEEEE (1)(1)1).:.;.:.E TCEFC E FCETC(1)(1)( 2 )( 2 )(1)0(1)( 2 )0( 2 )(1)(2)0(1)0(2)(.,);.:.:.;.:(.,.)(.,);.:.:.;.:(.,.(5)(6)(7)(8)BACKPATCHETC NXQEFCEFCE TCETCE FCMERG EFC EFCBACKPATCHEFC NXQETCETCE FCEFCE TCMERG

10、ETC EEEEE EEEEE E)TCjrop 用自下而上语法分析方法,语法制导翻译生成ABD的四元式。)0,();0,)(,(; 1.;.) 1)1()1(1JGENiEntryjnzGENNXQFCENXQTCEiE)(.:.);,.()2)1(0)1()1(0TCETCENXQFCEBACKPATCHEE)0 ,();0),(),(,(; 1:.;:.)3)2()1()2()1(,jGENiENTRYiENTRYjropGENNXQFCENXQTCEiropiE).,.(:.;.:.)4)2(0)2()2(0TCETCEMERGTCEFCEFCEEEEAE)1(. 1)0,() 1Aj

11、nz)0,()2jTCE.)1(1FCE.)1(2)1(0.2EE)3,.(FCEB31TCE .0DBE)2(. 3TCE.)2(3FCE.)2(4)0,()3DBj )0,()4j)2(0.4EEE 4FCE.1TCE.3).,.()2(0TCETCEMERG布尔表达式E是由布尔算符(,)作用于布尔变量或关系表达式而形成的。关系表达式形式 E1 rop E2rop是关系算符,E1和E2是算术表达式。说明上述两种计算方法对于不包含布尔函数调用的式子是没有什么差别的。仅当遇到布尔函数调用并且这种函数调用会引起副作用时,上述两种算法不等价。对于第一种方法而言,可以如同翻译算术表达式一样来翻译布尔表达式。ABC=D 翻译成 = C D T1 B T1 T2 A T2 T3 第二种方法是本节主要内容,下面将详细讨论。p( ).q( ).r( ).t( )pqrQ.front 2.解决办法 一般地讨论:凡是先有目标引用的出现,后有目标的定

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论