17th Ch7 语义分析和中间代码产生 II 2009Spring.ppt

17th Ch7 语义分析和中间代码产生 II 2009Spring.ppt

ID:48721611

大小:814.00 KB

页数:26页

时间:2020-01-20

17th Ch7 语义分析和中间代码产生 II 2009Spring.ppt_第1页
17th Ch7 语义分析和中间代码产生 II 2009Spring.ppt_第2页
17th Ch7 语义分析和中间代码产生 II 2009Spring.ppt_第3页
17th Ch7 语义分析和中间代码产生 II 2009Spring.ppt_第4页
17th Ch7 语义分析和中间代码产生 II 2009Spring.ppt_第5页
资源描述:

《17th Ch7 语义分析和中间代码产生 II 2009Spring.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、下面要讨论的是只含整型变量的简单赋值句的翻译。它的文法描述:Ai:=EEE+E

2、E*E

3、-E

4、(E)

5、i(7.1)非终结符A代表“赋值句”。该文法虽然是一个二义性文法,但接受通常对于算符的结合性和优先级的规定,即二义性可以克服。7.5简单算术表达式和赋值句到四元式的翻译NEWTEMP:函数过程。每次调用时,它都回送一个代表新临时变量名的整数码作为函数值。ENTRY(i):函数过程。E.PLACE:和非终结符E相联系的语义变量,它表示存放E值的变量名在符号表的入口或者整数码(若为临时变量)。GEN(OP,ARG1,AR

6、G2,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:=NEWTEM

7、P;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)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*(Ei:=E*(E+i:=E*(E+ii:=E*(E+E*(C+D)(C+D)C+D)+D)+D)D)

8、)))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都是整型。实际上,在一个表达式中可能出现各种不同类型的变量和常数。编译程序或者拒绝混合运算,或者产生有关类型转换的指令。例如:令文法7.1允许混

9、合类型。那么,在进行混合运算时,首先要将整型量转换为实型量。而要进行转换,其前提是对每一个VN必须有类型信息语义变量—E.TYPE。因此,对应的产生式要附加关于E.TYPE的语义规则。语义规则:{IFE(1).TYPE=intANDE(2).TYPE=intTHENE.TYPE:=intELSEE.TYPE:=r}语义动作的增加,意味着语义子程序的修改,必要时能够产生对运算量进行类型转换的四元式。(itr,A1,_,T)将整型量A1转换成实型量T。示例输入串为X:=Y+I*JX,Y为实型,I,J为整型。四元式:(*i,I

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

11、E∨E

12、┐E

13、(

14、E)

15、i

16、iropi(7.2)布尔算符的优先顺序:┐,∧,∨。∧、∨服从左结合。所有关系算符的优先级相同,高于任何布尔算符,低于任何算术算符。关系算符不得结合,如A>B>C不合法。布尔表达式E在语言中的用途:计算逻辑值X:=A∨B

17、nfalseelsetrue说明上述两种计算方法对于不包含布尔函数调用的式子是没有什么差别的。仅当遇到布尔函数调用并且这种函数调用会引起副作用时,上述两种算法不等价。对于第一种方法而言,可以如同翻译算术表达式一样来翻译布尔表达式。A∨B∧C=D翻译成=CDT1∧BT1T2∨AT2T3第二种方法是本节主要内容,下面将详

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。