收藏 分销(赏)

语法制导翻译和中间代码生成-PPT.pptx

上传人:精*** 文档编号:1778098 上传时间:2024-05-09 格式:PPTX 页数:50 大小:294KB
下载 相关 举报
语法制导翻译和中间代码生成-PPT.pptx_第1页
第1页 / 共50页
语法制导翻译和中间代码生成-PPT.pptx_第2页
第2页 / 共50页
语法制导翻译和中间代码生成-PPT.pptx_第3页
第3页 / 共50页
语法制导翻译和中间代码生成-PPT.pptx_第4页
第4页 / 共50页
语法制导翻译和中间代码生成-PPT.pptx_第5页
第5页 / 共50页
点击查看更多>>
资源描述

1、语法制导翻译和中间代码生成语法制导翻译和中间代码生成目标程序目标程序源程序源程序词法分析词法分析语法分析语法分析语义分析语义分析中间代码生成中间代码生成代码优化代码优化目标代码生成目标代码生成表格管理表格管理出错处理出错处理语义分析基分析基础n语义分析得内容分析得内容主要就是主要就是类型相容型相容检查,有以下几种有以下几种:1)各种条件表达式得各种条件表达式得类型就是不就是型就是不就是boolean型?型?2)运算符得分量运算符得分量类型就是否相容?型就是否相容?3)赋值语句得左右部得句得左右部得类型就是否相容?型就是否相容?4)形参与形参与实参得参得类型就是否相容型就是否相容?5)下下标表达

2、式得表达式得类型就是否型就是否为所允所允许得得类型?型?6)函数函数说明中得函数明中得函数类型与返回型与返回值得得类型就是否型就是否一致?一致?语义分析基分析基础-语义分析得内容分析得内容(续)其她其她语义检查:1)VE中得中得V就是不就是就是不就是变量量,而且就是数而且就是数组类型?型?2)V、i中得中得V就是不就是就是不就是变量量,而且就是而且就是记录类型?型?i就是不就是就是不就是该记录得域名?得域名?3)x+f()中得中得f就是不就是函数名?形参个数与就是不就是函数名?形参个数与实参个数就是否一致?参个数就是否一致?4)每个使用性每个使用性标识符就是否都有声明?有无符就是否都有声明?有

3、无标识符得重复声明?符得重复声明?语义分析基分析基础在在语义分分析析同同时产生生中中间代代码,在在这种种模模式式下下,语义分析得主要功能如下分析得主要功能如下:语义审查在在扫描声明部分描声明部分时构造构造标识符得符号表符得符号表在在扫描描语句部分句部分时产生中生中间代代码中中间代代码:独独立立于于机机器器,复复杂性性介介于于源源语言言与与机机器器语言言之之间,十十分分接接近近目目标机机器器指指令令得得一一种种表表示示形形式。式。对于于中中间代代码得得产生生,就就是是很很困困难得得,因因为语义形形式式化化比比语法形式化法形式化难得多。目前普遍采用得得多。目前普遍采用得语义分析方法分析方法语法制法

4、制导翻翻译方法方法使用属性文法使用属性文法为工具来工具来说明程序明程序设计语言得言得语义。6、1属性文法属性文法(AttributeGrammar)属性属性对文文法法得得每每一一个个符符号号,引引进一一些些属属性性,这些些属属性性代代表表与与文文法法符符号号相相关关得得信信息息,如如类型型、值、存存储位位置等。置等。n语义规则为文法得每一个文法得每一个产生式配生式配备得得计算属性得算属性得计算算规则,称称为语义规则。n属性文法就是属性文法就是带属性得一种文法属性得一种文法她得主要思想她得主要思想:n首先首先对于每个文法符号引于每个文法符号引进相关得属性符号相关得属性符号;n其次其次对于每个于每

5、个产生式写出生式写出计算属性算属性值得得语义规则6、1属性文法属性文法(续)属性文法得形式定属性文法得形式定义一个属性文法就是一个三元一个属性文法就是一个三元组,A,A(G,V,F)(G,V,F)nG G就是一个上下文无关文法就是一个上下文无关文法;nV V就是属性得有就是属性得有穷集集;nF F就是关于属性得断言得有就是关于属性得断言得有穷集。集。说明明:1.1.每每个个属属性性与与文文法法符符号号相相联,N N、t t表表示示文文法法符符号号N N得得属属性性t t。属属性性值又又称称语义值。存存储属属性性值得得变量量又称又称语义变量。量。2.2.每每个个断断言言与与文文法法得得某某个个产

6、生生式式相相联,写写在在 内内。属属性性得得断断言言又又称称语义规则,她她所所描描述述得得工工作作可可以以包包括括属属性性计算算、静静态语义检查、符符号号表表得得操操作作、代代码生成等生成等,有有时写成函数或写成函数或过程段。程段。6、1属性文法属性文法(续)例例完成完成类型型检查得属性文法得属性文法1)1)E ET T1 1+T+T2 2TT1 1、t tint AND Tint AND T2 2、t tintint2)2)E ET T1 1 or T or T2 2TT1 1、t tbool AND Tbool AND T2 2、t tboolbool3)3)T TnumnumTT、t:t

7、:intint4)4)T TtruetrueTT、t:t:boolbool5)5)T TfalsefalseTT、t:t:boolbool6、1属性文法属性文法(续)属性得分属性得分类:1.1.综合属性合属性:从从语法法树得角度来看得角度来看,如果一个如果一个结点得某一点得某一属性属性值就是由就是由该结点得子点得子结点得属性点得属性值计算算来得来得,则称称该属性属性为综合属性。合属性。内在属性就是内在属性就是综合属性。合属性。用于用于“自下而上自下而上”传递信息信息6、1属性文法属性文法(续)2.2.继承属性承属性从从语法法树得角度来看得角度来看,若一个若一个结点得某一属性点得某一属性值就是由

8、就是由该结点得兄弟点得兄弟结点与点与(或或)父父结点得属点得属性性值计算来得算来得,则称称该属性属性为继承属性。承属性。用于用于“自上而下自上而下”传递信息信息特特别说明明:n终结符只有符只有综合属性合属性,她她们由由词法分析器提供法分析器提供n非非终结符既有符既有综合属性也有合属性也有继承属性承属性,但文法开但文法开始符没有始符没有继承属性承属性6、1属性文法属性文法(续)例例简单算算术表达式求表达式求值得属性文法得属性文法1)LEPrint(E、val)2)EE1+TE、val:E1、val+T、val3)ETE、val:T、val4)TT1*FT、val:T1、val*F、val5)TF

9、T、val:F、val6)F(E)F、val:E、val7)FdigitF、val:digit、lexvalE、val、T、val、F、val都就是综合属性都就是综合属性终结符终结符digit只有综合属性只有综合属性lexval,她得值由词法分析她得值由词法分析器提供器提供12大家应该也有点累了,稍作休息大家应该也有点累了,稍作休息大家有疑问的,可以询问和交流大家有疑问的,可以询问和交流大家有疑问的,可以询问和交流大家有疑问的,可以询问和交流6、2语法制法制导翻翻译概概论1.语法制法制导翻翻译基本思想基本思想:在在语法法分分析析过程程中中,随随着着分分析析得得步步步步进展展,每每当当使使用用一

10、一条条产生生式式进行行推推导(对于于自自上上而而下下分分析析)或或归约(对于于自自下下而而上上分分析析),就就执行行该产生生式式所所对应得得语义动作作(语义子子程程序序),完完成成相相应得得翻翻译工工作作(产生中生中间代代码)。语法法制制导翻翻译法法不不论对自自上上而而下下分分析析或或自自下下而上分析都适用。而上分析都适用。例例简单算术表达式求值得属性文法简单算术表达式求值得属性文法1)EE1+TE、val:E1、val+T、val2)ETE、val:T、val3)TT1*digitT、val:T1、val*digit、lexval4)TdigitT、val:digit、lexval2+3*5

11、得语法树得语法树:EE1+TT1*5T23T、val=2T、val=3T、val=15E、val=2E、val=17自下而上语法制导翻译过程自下而上语法制导翻译过程:一旦语法分析确认输入符号串就是一个句子一旦语法分析确认输入符号串就是一个句子,她得值也同时她得值也同时由语义规则计算出来由语义规则计算出来6、3中中间代代码得形式得形式n定定义:中中间代代码就就是是独独立立于于机机器器,复复杂性性介介于于源源语言言与与机机器器语言言之之间,十十分分接接近近目目标机机器器指指令令得得一一种表示形式。种表示形式。n使用中使用中间代代码得好得好处:n中中间代代码与与具具体体机机器器无无关关,便便于于编译

12、程程序序改改变目目标机机n便于便于对中中间代代码进行与机器无关得行与机器无关得优化化n表示形式表示形式:逆逆波波兰式式、四四元元式式、三三元元式式、间接接三三元元式式与与树形表示形表示6、3、1逆波逆波兰表示法表示法(后后缀式式)n逆波逆波兰表示法表示法将将运运算算对象象写写在在前前面面,把把运运算算符符写写在在后后面面,因而也称后因而也称后缀式。式。例如例如:程序设计语言中得表示程序设计语言中得表示 逆波兰表示逆波兰表示a+bab+a+b*cabc*+(a+b)*cab+c*bt1dct1t2t1t3t1=-bt2=c*dt3=t1+t2例例:表达式表达式bc*d得后缀式得后缀式bcd*+得

13、计值过程得计值过程n后后缀式得式得计算机算机处理理n后后缀式得最大式得最大优点就是易于点就是易于计算机算机处理理n处理理过程程:从从左左到到右右扫描描后后缀式式,每每碰碰到到运运算算对象象就就推推进栈;碰碰到到运运算算符符就就从从栈顶弹出出相相应目目数数得得运运算算对象象施施加加运运算算,并把并把结果推果推进栈。最后得。最后得结果留在果留在栈顶。n逆波兰表示法得扩充逆波兰表示法得扩充逆波兰表示法很容易扩充到表达式以外得范围逆波兰表示法很容易扩充到表达式以外得范围例如例如:语句语句逆波兰表示逆波兰表示备注备注a:=b+cabc+:=:=看作二目运算符看作二目运算符GOTOLLjumpjump看看

14、成成一一目目运运算符算符,表示表示GOTOIfEthenS1elseS2ES1S2¥把¥把¥看成三目运算看成三目运算符符,表示表示ifthenelse6、3、2三元式三元式n三元式三元式(算算符符op,第第一一个个运运算算对象象ARG1,第第二二个个运运算算对象象ARG2)说明说明:三元式得某些运算对象就三元式得某些运算对象就是另一个三元式得编号是另一个三元式得编号(代代表其结果表其结果)一目算符只需选用一个运一目算符只需选用一个运算对象算对象(ARG1)多目算符可用连续几个三多目算符可用连续几个三元式表示元式表示例例:a:b*c+b*d表示为表示为(1)(*,b,c)(2)(*,b,d)(3

15、)(+,(1),(2)(4)(:,(3),a)6、3、3树形表示形表示n树形表示树形表示二二目目运运算算对对应应二二叉叉子子树树,多多目目运运算算对对应应多多叉叉子子树树,但通常通过引入新结点表示成二叉子树。但通常通过引入新结点表示成二叉子树。例如例如:a:b*c+b*d表示成表示成:=a+*bcbd叶子结点代表运算量叶子结点代表运算量,非叶子结点代表运算符非叶子结点代表运算符6、3、4四元式四元式n四元式四元式四元式就是一种比四元式就是一种比较普遍采用得中普遍采用得中间代代码形式形式(算符算符op,ARG1,ARG2,运算运算结果果RESULT)例如例如:a:b*c+b*d得四元式表示如下得

16、四元式表示如下:1)(*,b,c,t1)2)(*,b,d,t2)3)(+,t1,t2,t3)4)(:,t3,a)其中其中ti(i1,2,3)就是编译程序引入得临时变量就是编译程序引入得临时变量6、3、4四元式四元式(续)n四元式得四元式得优点点:n四元式比三元式更便于四元式比三元式更便于优化化优化化要要求求改改变运运算算顺序序或或删除除某某些些运运算算,引引起起编号号得得变化。化。三三元元式式通通过编号号引引用用中中间结果果,编号号得得变化化引引起起麻麻烦;四四元元式式通通过临时变量量引引用用中中间结果果,编号号变化化无无影响。影响。n四元式四元式对生成目生成目标代代码有利有利四四元元式式表表

17、示示很很类似似于于三三地地址址指指令令,很很容容易易转换成成机机器代器代码。6、3、4四元式四元式(续)n四元式得另一种表示四元式得另一种表示有有时为了了更更直直观,把把四四元元式式写写成成简单赋值形形式式或或更易理解得形式更易理解得形式(三地址三地址码)四元式四元式直观形式直观形式(1)(*,b,c,t1)(1)t1:b*c(2)(*,b,d,t2)(2)t2:b*d(3)(+,t1,t2,t3)(3)t3:t1+t2(4)(:,t3,a)(4)a:t36、3、5间接三元式接三元式n为了便于了便于优化化处理理,不直接使用三元式不直接使用三元式,而就是另而就是另设一一张指示器表指示器表(称称为

18、间接接码表表),她按照运算得先后她按照运算得先后顺序列出有关三元序列出有关三元式在三元式表中得位置。即式在三元式表中得位置。即:用一用一张间接接码表表辅以三元式表得方法来表示中以三元式表得方法来表示中间代代码。n四元式、四元式、间接三元式得接三元式得优化同化同样方便方便,三三元式得元式得优化十分困化十分困难。举例例:给出给出A+B*(C-D)+E/(C-D)N得逆波兰式、得逆波兰式、四元式、三元式、间接三元式得表示四元式、三元式、间接三元式得表示1、逆波兰式、逆波兰式:ABCD-*+ECD-N/+2、四元式、四元式:1)(-,C,D,T1)2)(*,B,T1,T2)3)(+,A,T2,T3)4

19、)(-,C,D,T4)5)(,T4,N,T5)6)(/,E,T5,T6)7)(+,T3,T6,T7)举例例:给出给出A+B*(C-D)+E/(C-D)N得逆波兰式、得逆波兰式、四元式、三元式、间接三元式得表示四元式、三元式、间接三元式得表示3、三元式、三元式:1)(-,C,D)2)(*,B,1)3)(+,A,2)4)(-,C,D)5)(,4),N)6)(/,E,5)7)(+,3),6)4、间接三元式、间接三元式:1)(-,C,D)2)(*,B,1)3)(+,A,2)4)(,1),N)5)(/,E,4)6)(+,3),5)间接码表间接码表1)2)3)1)4)5)6)6、4语法制法制导翻翻译n主要

20、主要讨论自下而上得自下而上得语法制法制导翻翻译n在一个在一个产生式生式进行行归约时,执行相行相应得得语义动作作进行翻行翻译(产生中生中间代代码)6、4、1简单赋值语句到四元式得句到四元式得翻翻译简单赋值语句句就是指不含复就是指不含复杂数据数据类型型(如数如数组,记录等等)得得赋值语句。句。赋值语句得句得语义检查包括包括:1.每个使用性每个使用性标识符就是否都有声明?符就是否都有声明?2.运算符得分量运算符得分量类型就是否相容?型就是否相容?3.赋值语句得左右部得句得左右部得类型就是否相容?型就是否相容?赋值语句得翻句得翻译目目标:在在赋值语句右部表达式句右部表达式产生得四元式序列后加生得四元式

21、序列后加一条一条赋值四元式四元式6、4、1简单赋值语句到四元式得翻句到四元式得翻译考虑如下文法描述得简单赋值句得翻译考虑如下文法描述得简单赋值句得翻译:Ai:=E EE+E|E*E|-E|(E)|i (6、1)A代表赋值语句代表赋值语句,设只含整型变量得运算设只含整型变量得运算1、需要定义一系列得语义变量与语义过程、需要定义一系列得语义变量与语义过程:NEWTEMP:函数函数,生成临时变量生成临时变量,每次调用生成一个新得每次调用生成一个新得临时变量临时变量,如如t1,t2,返回一个整数码作为函数值。返回一个整数码作为函数值。ENTRY(i):函数过程函数过程,查找并取得与查找并取得与i相对应

22、得标识符相对应得标识符在符号表中得位置在符号表中得位置(入口入口),简称简称i值。值。E、PLACE:与与E相联系得语义变量相联系得语义变量,表示存放表示存放E值得变量值得变量名在符号表得入口。名在符号表得入口。GEN(OP,ARG1,ARG1,RESULT):语义过程语义过程,将四元式将四元式(OP,ARG1,ARG1,RESULT)填进四元式表中。填进四元式表中。n使用上述使用上述变量与量与过程程,对文法文法6、1所定所定义得得赋值语句得翻句得翻译算法可由下述算法可由下述语义动作予以描述作予以描述6、4、1简单赋值语句到四元式得句到四元式得翻翻译产生式产生式语义动作语义动作Ai:=EGEN

23、(:=,E、PLACE,-,ENTRY(i)EE(1)+E(2)E、PLACE:=NEWTEMP;GEN(+,E(1)、PLACE,E(2)、PLACE,E、PLACE)EE(1)*E(2)E、PLACE:=NEWTEMP;GEN(*,E(1)、PLACE,E(2)、PLACE,E、PLACE)E-E(1)E、PLACE:=NEWTEMP;GEN(,E(1)、PLACE,-,E、PLACE)E(E(1)E、PLACE:=E(1)、PLACEEiE、PLACE:=ENTRY(i)输入串输入串栈栈PLACE四元式四元式A:=-B*(C+D):=-B*(C+D)iA-B*(C+D)i:=A_B*(C

24、+D)i:=-A_ _*(C+D)i:=-iA_ _B*(C+D)i:=-EA_ _B(,B,-,T1)*(C+D)i:=EA_T1(C+D)i:=E*A_T1 _C+D)i:=E*(A_T1 _ _+D)i:=E*(iA_T1 _ _C+D)i:=E*(EA_T1 _ _CD)i:=E*(E+A_T1 _ _C_)i:=E*(E+iA_T1 _ _C_D)i:=E*(E+E A_T1 _ _C_D(+,C,D,T2)i:=E*(EA_T1 _ _T2i:=E*(E)A_T1 _ _T2 _i:=E*EA_T1 _T2(*,T1,T2,T3)i:=EA_ T3(:=,T3,-,A)A2例例:写

25、出下面赋值语句写出下面赋值语句A:=-B*(C+D)得自下而得自下而上语法制导翻译得过程上语法制导翻译得过程,及生成得四元式。及生成得四元式。Ai:=E EE+E|E*E|-E|(E)|i 四元式为四元式为:(1)(,B,-,T1)(2)(+,C,D,T2)(3)(*,T1,T2,T3)(4)(:=,T3,-,A)3、类型型转换表达式中可能出表达式中可能出现不同不同类型得型得变量与常量量与常量若不接受不同若不接受不同类型得运算型得运算对象混合运算象混合运算,则应指出指出错误;若接受混合运算若接受混合运算则要要进行行类型型转换处理。理。例例:假定表达式可以有混合运算假定表达式可以有混合运算,变量

26、可以就是整型与量可以就是整型与实型型,且当两个不同且当两个不同类型得型得变量量进行运算行运算时先把整型先把整型变量量转换成成实型型,再再进行运算。行运算。用用+i,*i,i表示整型运算表示整型运算,用用+r,*r,r表示表示实型运算型运算,用一目算符用一目算符itr表示将整型量表示将整型量转换成成实型量得运算型量得运算令文法令文法6、1中得中得i既可以就是整型也可以就是既可以就是整型也可以就是实型型1)用用E、MODE表示表示E得得类型信息型信息,其其值为int或或r,则产生式生式EE(1)op E(2)得得语义动作中作中,关于关于E、MODE得得语义规则可定可定义为:ifE1、MODEint

27、ANDE2、MODEintthenE、MODE:=intelseE、MODE:=r3、类型型转换(续)2)EE(1)op E(2)得得语义程序程序应该修改修改,必要必要时产生生对运算量运算量进行行类型型转换得四元式得四元式:(itr,A,-,T),表示把整型表示把整型A转换成成实型量型量,结果存于果存于T中。中。3)例例:假定假定输入串入串为X:=Y+I*J,其中其中X,Y为实型型,I,J为整型整型,则其其产生得四元式生得四元式为:(1)(*i,I,J,T1)(2)(itr,T1,-,T2)(3)(+r,Y,T2,T3)(4)(:=,T3,-,X)4)例例:关于关于产生式生式EE(1)op E

28、(2)得得语义子程序子程序更更为具体得描述具体得描述为:T:=NEWTEMP;IFE1、MODE=intANDE2、MODE=intTHENBEGINGEN(opi,E1、PLACE,E2、PLACE,T);E、MODE:=intENDELSEIFE1、MODE=rANDE2、MODE=rTHENBEGINGEN(opr,E1、PLACE,E2、PLACE,T);E、MODE:=rENDELSEIFE1、MODE=int/*ANDE2、MODE=r*/THENBEGINU:=NEWTEMP;GEN(itr,E1、PLACE,-,U);GEN(opr,U,E2、PLACE,T);E、MODE:=

29、rENDELSE/*E1、MODE=rANDE2、MODE=int*/BEGINU:=NEWTEMP;GEN(itr,E2、PLACE,-,U);GEN(opr,E2、PLACE,U,T);E、MODE:=rENDE、PLACE:=TEE(1)op E(2)布布尔表达式得两个作用表达式得两个作用:用于用于逻辑运算运算,计算算逻辑值作作为控控制制语句句(如如if-then,while)得得条条件件表达式表达式布布尔表表达达式式由由布布尔算算符符(not,and,or)作作用用于于布布尔变量量(或或常常数数)或或关关系系表表达达式式而而形成得。形成得。关关系系表表达达式式得得形形式式:E1ropE

30、2,rop就就是是关关系算符系算符(如如,=)6、4、2布布尔表达式到四元式得翻表达式到四元式得翻译为简单起起见,只只考考虑如如下下形形式式得得布布尔表表达达式式得得翻翻译,文法文法(6、2)EEorE|EandE|notE|(E)|idropid|id布布 尔 算算 符符 得得 优 先先 顺 序序(从从 高高 到到 低低)为:not,and,or,且且and与与or都都服服从从左左结合合,not服服从右从右结合合关关系系算算符符得得优先先级都都相相同同,而而且且高高于于任任何何布布尔算符算符,低于任何算低于任何算术算符算符6、4、2布布尔表达式到四元式得翻表达式到四元式得翻译-续1、布布尔表

31、达式得表达式得计算方法算方法:采用两种方法采用两种方法:数数值表示得直接表示得直接计算与算与逻辑表示表示得短路得短路计算算n直接直接计算与算算与算术表达式表达式计算方法基本相同算方法基本相同如如:1or0and1=1or0得得结果果为:1短路短路计算即布算即布尔表达式表达式计算到某一部分就可以得算到某一部分就可以得到到结果果,而无需而无需对布布尔表达式表达式进行完全行完全计算。可算。可以用以用if-then-else来解来解释AorBifAthentrueelseBAandBifAthenBelsefalsenotAifAthenfalseelsetrue2、直接、直接计算得算得语法制法制导翻

32、翻译布布尔表达式有两种翻表达式有两种翻译方法。方法。(视计算机硬件条算机硬件条件来确定件来确定,如果如果执行条件行条件转移效率移效率较低低,就用第就用第一种方法一种方法)n直接直接计算得算得语法制法制导翻翻译如同翻如同翻译算算术表达式一表达式一样来翻来翻译布布尔表达式表达式如如:AorBandnotC被翻译成被翻译成:(1)(not,C,-,T1)(2)(and,B,T1,T2)(3)(or,A,T2,T3)3、作作为条件控制得布条件控制得布尔式翻式翻译基本翻基本翻译方法方法当当布布尔表表达达式式用用于于控控制制条条件件时,并并不不需需要要计算算表表达达式式得得值,而而就就是是一一旦旦确确定定

33、了了表表达达式式为真真或或为假假,就就将控制将控制转向相向相应得代得代码序列。序列。S2的代码的代码S1的代码的代码E的代码的代码E.falseE.trueifEthenS1elseS2为布尔表达式为布尔表达式E引入两个新得引入两个新得属性属性:E、true:表达式得真出口表达式得真出口,她指向表达式为真时得转向她指向表达式为真时得转向E、false:表达式得假出口表达式得假出口,她指向表达式为假时得转向她指向表达式为假时得转向把布把布尔表达式表达式E翻翻译成下述形式得条件成下述形式得条件转移与无条移与无条件件转移得四元式序列移得四元式序列:1.(jnz,A,-,p)若若A为真真,则转向四元式

34、向四元式p2.(jrop,A,B,p)若若AropB为真真,则转向四元式向四元式p3.(j,-,-,p)无条件无条件转向四元式向四元式p3、作作为条件控制得布条件控制得布尔式翻式翻译-续(1)(jnz,A,-,5)A得真出口得真出口为5(2)(j,-,-,3)A得假出口得假出口为3(3)(j,B,D,5)BD得真出口得真出口为5(4)(j,-,-,p+1)BD得假出口得假出口为(p+1)(5)(关于关于S1得四元式序列得四元式序列)(p)(j,-,-,q)跳跳过S2得代得代码段段(p+1)(关于关于S2得四元式序列得四元式序列)(q)(1)-(4)就是布尔式就是布尔式AorBD翻译产生得代码翻

35、译产生得代码,全部就是全部就是条条件转移与无条件转移四元式件转移与无条件转移四元式,没有布尔运算。没有布尔运算。例例:ifAorBDthenS1elseS2翻译成如下四元式序列翻译成如下四元式序列具体具体说明如下明如下:用用E、true与与E、false分分别表表示示E得得“真真”与与“假假”出口出口转移目移目标,在翻在翻译E时并未能确定。并未能确定。n对于于E为aropb形式形式,生成代生成代码如下如下:(jrop,a,b,E、true)(j,E、false)以以结构构图表示表示:E的代码的代码E.falseE.true对于对于E为为E1orE2得形式得形式,生成代码结构如下生成代码结构如下

36、:E1.的代码的代码E2.的代码的代码E1.falseE2.falseE.falseE1.trueE2.trueE.true若若E1为真为真,则可知则可知E为真为真,即即E1得真出口与得真出口与E得真出口一样得真出口一样;若若E1为假为假,则必须计算则必须计算E2,因此因此E1得假出口应就是得假出口应就是E2代码得第一个代码得第一个四元式序号四元式序号;E2得真出口与假出口分别与得真出口与假出口分别与E得真出口与假出口一样得真出口与假出口一样E1.的代码的代码E2.的代码的代码E1.falseE2.falseE.falseE1.trueE2.trueE.true对于对于E为为E1andE2得形

37、式得形式,生成代码结构如下生成代码结构如下:对于对于E为为notE1形式形式,只需调换只需调换E1得真假出口得真假出口,即即可得到可得到E得真假出口。得真假出口。例例:E为为aborcf,翻译为四元式序列翻译为四元式序列:(1)(j,a,b,E、true)(2)(j,-,-,(3)(3)(j,e,f,E、true)(6)(j,-,-,E、false)举例举例真假出口得拉链与回填真假出口得拉链与回填在把布尔式翻译成一串条件转与无条件转四元在把布尔式翻译成一串条件转与无条件转四元式时式时,真假出口未能在生成四元式时确定真假出口未能在生成四元式时确定;而且而且多个四元式可能有相同得出口多个四元式可能

38、有相同得出口说明说明:E、true与与E、false不不能在产生四元式得同能在产生四元式得同时确定时确定,要等将来目要等将来目标明确时再回填标明确时再回填,为为此要记录这些要回填此要记录这些要回填得四元式。得四元式。通常采用通常采用“拉链拉链”得得办法办法,把需要回填把需要回填E、true得四元式拉成一得四元式拉成一条条“真真”链链,把需要把需要回填回填E、false得四元得四元式拉成一条式拉成一条“假假”链。链。ifaborcfthenS1elseS2翻译为四元式序列翻译为四元式序列:(1)(j,a,b,(7)(2)(jump,-,-,(3)(3)(j,e,f,(7)(6)(jump,-,-

39、,(p+1)(7)(关于关于S1得四元式得四元式)(p)(jump,-,-,q)(p+1)(关于关于S2得四元式得四元式)(q)练习:把下面得语句翻译成四元式序列把下面得语句翻译成四元式序列:If AB or CD then X:=Y else X:=Y=1100(j,A,B,104)101(j,-,-,102)102(j,C,D,104)103(j,-,-,106)104(:=,Y,-,X)105(j,-,-,108)106(+,Y,1,T)107(:=,T,-,X)108说明说明:产生就是产生就是100103就是对应布就是对应布尔式尔式ABorC=,C,D,106)。但这些。但这些就是下一

40、阶段代码优化要讨就是下一阶段代码优化要讨论得问题论得问题,暂不讨论。暂不讨论。6、4、3控制控制语句得翻句得翻译n以以if语句句,while语句句为例例说明控制明控制语句得翻句得翻译方法方法SifEthenS1if语句语句|ifEthenS1elseS2if语句语句|whileEdoSwhile语句语句其中其中:E:布尔表达式布尔表达式,S,S1,S2为语句为语句E1=1E2=1S1S2S3endstartYesNoYesNo条件条件转移移语句得共同特点就是句得共同特点就是:根据布根据布尔表达式取表达式取值,分分别执行不同得行不同得语句序列。句序列。问题:不同得不同得语句序列句序列结束后束后,如何使控制如何使控制转向向语句得句得结束。例如束。例如:ifE1thenifE2thenS1elseS2elseS3If-then,if-then-else得得翻译参见上面得方法。翻译参见上面得方法。下面主要考虑下面主要考虑while语句语句得翻译得翻译While语句得翻句得翻译qwhileEdoS1代码结构代码结构E.true S1的代码的代码E的代码的代码E.false begin:

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服