资源描述
,天津财经大学信息科学与技术系,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,天津财经大学信息科学与技术系,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,6,章 语法制导翻译和中间代码生成,天津财经大学信息科学与技术系,天津财经大学信息科学与技术系,目标程序,源程序,词法分析,语法分析,语义分析,中间代码生成,代码优化,目标代码生成,表格管理,出错处理,天津财经大学信息科学与技术系,语义分析基础,语义分析的内容,主要是类型相容检查,有以下几种:,各种条件表达式的类型是不是,boolean,型?,运算符的分量类型是否相容?,赋值语句的左右部的类型是否相容?,形参和实参的类型是否相容,?,下标表达式的类型是否为所允许的类型?,函数说明中的函数类型和返回值的类型是否一致?,天津财经大学信息科学与技术系,语义分析基础,-,语义分析的内容(续),其它语义检查:,VE,中的,V,是不是变量,而且是数组类型?,V.i,中的,V,是不是变量,而且是记录类型?,i,是不是该记录的域名?,x+f(),中的,f,是不是函数名?形参个数和实参个数是否一致?,每个使用性标识符是否都有声明?有无标识符的重复声明?,天津财经大学信息科学与技术系,语义分析基础,在语义分析同时产生中间代码,在这种模式下,语义分析的主要功能如下:,语义审查,在扫描声明部分时构造标识符的符号表,在扫描语句部分时产生中间代码,中间代码:,独立于机器,复杂性介于源语言和机器语言之间,十分接近目标机器指令的一种表示形式。,对于中间代码的产生,是很困难的,因为语义形式化比语法形式化难得多。目前普遍采用的,语义分析方法,语法制导翻译,方法,使用,属性文法,为工具来说明程序设计语言的语义。,天津财经大学信息科学与技术系,6.1,属性文法,(Attribute Grammar,),属性,对文法的每一个符号,引进一些属性,这些属性代表与文法符号相关的信息,如类型、值、存储位置等。,语义规则,为文法的每一个产生式配备的计算属性的计算规则,称为语义规则。,属性文法,是带属性的一种文法,它的主要思想:,首先对于每个文法符号引进相关的属性符号;,其次对于每个产生式写出计算属性值的语义规则,天津财经大学信息科学与技术系,6.1,属性文法,(,续,),属性文法的形式定义,一个属性文法是一个三元组,A,(G,V,F),G,是一个上下文无关文法;,V,是属性的有穷集;,F,是关于属性的断言的有穷集。,说明:,每个,属性,与文法符号相联,,N.t,表示文法符号,N,的属性,t,。,属性值,又称,语义值,。存储属性值的变量又称,语义变量,。,每个断言与文法的某个产生式相联,写在,内。属性的断言又称,语义规则,,它所描述的工作可以包括属性计算、静态语义检查、符号表的操作、代码生成等,有时写成函数或过程段。,天津财经大学信息科学与技术系,6.1,属性文法,(,续,),例,完成类型检查的属性文法,E,T,1,+T,2,T,1,.t,int AND T,2,.t,int,E,T,1,or T,2,T,1,.t,bool AND T,2,.t,bool,T,numT.t:,int,T,trueT.t:,bool,T,falseT.t:,bool,天津财经大学信息科学与技术系,6.1,属性文法,(,续,),属性的分类:,综合属性:,从语法树的角度来看,如果一个结点的某一属性值是由该结点的子结点的属性值计算来的,则称该属性为综合属性。,内在属性是综合属性。,用于“自下而上”传递信息,天津财经大学信息科学与技术系,6.1,属性文法,(,续,),继承属性,从语法树的角度来看,若一个结点的某一属性值是由该结点的兄弟结点和(或)父结点的属性值计算来的,则称该属性为继承属性。,用于“自上而下”传递信息,特别说明:,终结符,只有综合属性,它们由词法分析器提供,非终结符,既有综合属性也有继承属性,但,文法开始符,没有继承属性,天津财经大学信息科学与技术系,6.1,属性文法,(,续,),例,简单算术表达式求值的属性文法,L,E Print(E.val),E,E,1,+T E.val:,E,1,.val+T.val,E,T E.val:,T.val,T,T,1,*F T.val:,T,1,.val*F.val,T,F T.val:,F.val,F,(E)F.val:,E.val,F,digit F.val:,digit.lexval,E.val,、,T.val,、,F.val,都是综合属性,终结符,digit,只有综合属性,lexval,,它的值由词法分析器提供,天津财经大学信息科学与技术系,6.2,语法制导翻译概论,语法制导翻译,基本思想:,在语法分析过程中,随着分析的步步进展,每当使用一条产生式进行,推导,(对于自上而下分析)或,归约,(对于自下而上分析),就执行该产生式所对应的,语义动作,(语义子程序),,完成相应的翻译工作,(产生中间代码),。,语法制导翻译法不论对,自上而下分析,或,自下而上分析,都适用。,天津财经大学信息科学与技术系,例 简单算术表达式求值的属性文法,E,E,1,+T E.val:,E,1,.val+T.val,E,T E.val:,T.val,T,T,1,*digit T.val:,T,1,.val*digit.lexval,T,digit T.val:,digit.lexval,2+3*5,的语法树:,E,E,1,+,T,T,1,*,5,T,2,3,T.val=2,T.val=3,T.val=15,E.val=2,E.val=17,自下而上语法制导翻译过程:,一旦语法分析确认输入符号串是一个句子,它的值也同时由语义规则计算出来,天津财经大学信息科学与技术系,6.3,中间代码的形式,定义:,中间代码是独立于机器,复杂性介于源语言和机器语言之间,十分接近目标机器指令的一种表示形式。,使用中间代码的好处:,中间代码与具体机器无关,便于编译程序改变目标机,便于对中间代码进行与机器无关的优化,表示形式:,逆波兰式、四元式、三元式、间接三元式和树形表示,天津财经大学信息科学与技术系,逆波兰表示法(后缀式),逆波兰表示法,将运算对象写在前面,把运算符写在后面,因而也称后缀式。,例如:,程序设计语言中的表示,逆波兰表示,a+b,ab+,a+b*c,abc*+,(a+b)*c,ab+c*,天津财经大学信息科学与技术系,b,t,1,d,c,t,1,t,2,t,1,t,3,t,1,=-b,t,2,=c*d,t,3,=t,1,+t,2,例:表达式,b,c*d,的后缀式,bcd*+,的计值过程,后缀式的计算机处理,后缀式的最大优点是易于计算机处理,处理过程:,从左到右扫描后缀式,每碰到运算对象就推进栈;碰到运算符就从栈顶弹出相应目数的运算对象施加运算,并把结果推进栈。最后的结果留在栈顶。,天津财经大学信息科学与技术系,逆波兰表示法的扩充,逆波兰表示法很容易扩充到表达式以外的范围,例如:,语句,逆波兰表示,备注,a:=b+c,abc+:=,:=,看作二目运算符,GOTO L,L jump,jump,看成一目运算符,表示,GOTO,If E then S,1,else S,2,ES,1,S,2,¥,把¥看成三目运算符,表示,if then else,天津财经大学信息科学与技术系,三元式,三元式,(,算符,op,,第一个运算对象,ARG1,第二个运算对象,ARG2),说明:,三元式的某些运算对象是另一个三元式的编号(代表其结果),一目算符只需选用一个运算对象(,ARG1,),多目算符可用连续几个三元式表示,例:,a:,b*c+b*d,表示为,(1)(*,b,c),(2)(*,b,d),(3)(+,(1),(2),(4)(:,(3),a),天津财经大学信息科学与技术系,树形表示,树形表示,二目运算对应二叉子树,多目运算对应多叉子树,但通常通过引入新结点表示成二叉子树。,例如,:,a:,b*c+b*d,表示成,:=,a,+,*,*,b,c,b,d,叶子结点代表运算量,非叶子结点代表运算符,天津财经大学信息科学与技术系,四元式,四元式,四元式是一种比较普遍采用的中间代码形式,(,算符,op,,,ARG1,,,ARG2,,运算结果,RESULT,),例如:,a:,b*c+b*d,的四元式表示如下:,(*,b,c,t,1,),(*,b,d,t,2,),(+,t,1,t,2,t,3,),(:,t,3,a),其中,t,i,(,i,1,2,3,)是编译程序引入的临时变量,天津财经大学信息科学与技术系,四元式(续),四元式的优点:,四元式比三元式更便于优化,优化要求改变运算顺序或删除某些运算,引起编号的变化。,三元式通过编号引用中间结果,编号的变化引起麻烦;四元式通过临时变量引用中间结果,编号变化无影响。,四元式对生成目标代码有利,四元式表示很类似于三地址指令,很容易转换成机器代码。,天津财经大学信息科学与技术系,四元式(续),四元式的另一种表示,有时为了更直观,把四元式写成简单赋值形式或更易理解的形式,(,三地址码,),四元式,直观形式,(,1,)(*,b,c,t,1,),(,1,),t,1,:,b*c,(,2,)(*,b,d,t,2,),(,2,),t,2,:,b*d,(,3,)(,+,t,1,t,2,t,3,),(,3,),t,3,:,t,1,+t,2,(,4,)(,:,t,3,a,),(,4,),a:,t,3,天津财经大学信息科学与技术系,间接三元式,为了便于优化处理,不直接使用三元式,而是另设一张指示器表(称为间接码表),它按照运算的先后顺序列出有关三元式在三元式表中的位置。即:,用一张间接码表辅以三元式表的方法来表示中间代码。,四元式、间接三元式的优化同样方便,三元式的优化十分困难。,天津财经大学信息科学与技术系,举例:,给出,A+B*(C-D)+E/(C-D)N,的逆波兰式、四元式、三元式、间接三元式的表示,1,、逆波兰式:,ABCD-*+ECD-N/+,2,、四元式:,(-,C,D,T,1,),(*,B,T,1,T,2,),(+,A,T,2,T,3,),(-,C,D,T,4,),(,T,4,N,T,5,),(/,E,T,5,T,6,),(+,T,3,T,6,T,7,),天津财经大学信息科学与技术系,举例:,给出,A+B*(C-D)+E/(C-D)N,的逆波兰式、四元式、三元式、间接三元式的表示,3,、三元式:,(-,C,D),(*,B,1),),(+,A,2),),(-,C,D),(,4),N),(/,E,5),),(+,3),6),),4,、间接三元式:,(-,C,D),(*,B,1),),(+,A,2),),(,1),N),(/,E,4),),(+,3),5),),间接码表,1),2),3),1),4),5),6),天津财经大学信息科学与技术系,6.4,语法制导翻译,主要讨论,自下而上,的语法制导翻译,在一个产生式进行归约时,执行相应的语义动作进行翻译(产生中间代码),天津财经大学信息科学与技术系,简单赋值语句到四元式的翻译,简单赋值语句,是指不含复杂数据类型(如数组,记录等)的赋值语句。,赋值语句的语义检查包括,:,每个使用性标识符是否都有声明?,运算符的分量类型是否相容?,赋值语句的左右部的类型是否相容?,赋值语句的翻译目标:,在赋值语句右部表达式产生的四元式序列后加一条赋值四元式,天津财经大学信息科学与技术系,简单赋值语句到四元式的翻译,考虑如下文法描述的简单赋值句的翻译:,A,i:=E EE+E|E*E|-E|(E)|i (6.1),A,代表赋值语句,设只含整型变量的运算,1,、需要定义一系列的语义变量和语义过程:,NEWTEMP,:函数,生成临时变量,每次调用生成一个新的临时变量,如,t,1,t,2,返回一个整数码作为函数值。,ENTRY(i),:函数过程,查找并取得与,i,相对应的标识符,在符号表中的位置(入口),简称,i,值。,E.PLACE,:与,E,相联系的语义变量,表示存放,E,值的变量名在符号表的入口。,GEN(OP,ARG1,ARG1,RESULT),:语义过程,将四元式,(OP,ARG1,ARG1,RESULT),填进四元式表中。,天津财经大学信息科学与技术系,使用上述变量和过程,对文法,6.1,所定义的赋值语句的翻译算法可由下述语义动作予以描述,简单赋值语句到四元式的翻译,产生式,语义动作,A,i:=E,GEN(:=,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),.PLACE,Ei,E.PLACE:=ENTRY(i),天津财经大学信息科学与技术系,输入串,栈,PLACE,四元式,A:=-B*(C+D),:=-B*(C+D),i,A,-B*(C+D),i:=,A_,B*(C+D),i:=-,A_ _,*(C+D),i:=-i,A_ _B,*(C+D),i:=-E,A_ _B,(,B,-,T,1,),*(C+D),i:=E,A_T,1,(C+D),i:=E*,A_T,1,_,C+D),i:=E*(,A_T,1,_ _,+D),i:=E*(i,A_T,1,_ _C,+D),i:=E*(E,A_T,1,_ _C,D),i:=E*(E+,A_T,1,_ _C_,),i:=E*(E+i,A_T,1,_ _C_D,),i:=E*(E+E,A_T,1,_ _C_D,(+,C,D,T,2,),),i:=E*(E,A_T,1,_ _T,2,i:=E*(E),A_T,1,_ _T,2,_,i:=E*E,A_T,1,_T,2,(*,T,1,T,2,T,3,),i:=E,A_ T,3,(:=,T,3,-,A),A,2,例,:写出下面赋值语句,A:=-B*(C+D),的自下而上语法制导翻译的过程,及生成的四元式。,A,i:=E EE+E|E*E|-E|(E)|i,四元式为,:(1),(,B,-,T,1,)(2)(+,C,D,T,2,)(3)(*,T,1,T,2,T,3,)(4)(:=,T,3,-,A),天津财经大学信息科学与技术系,3,、类型转换,表达式中可能出现不同类型的变量和常量,若不接受不同类型的运算对象混合运算,则应指出错误;,若接受混合运算则要进行类型转换处理。,例:假定表达式可以有混合运算,变量可以是整型和实型,且当两个不同类型的变量进行运算时先把整型变量转换成实型,再进行运算。,用,+,i,*,i,i,表示整型运算,用,+,r,*,r,r,表示实型运算,用一目算符,itr,表示将整型量转换成实型量的运算,令文法,6.1,中的,i,既可以是整型也可以是实型,用,E.MODE,表示,E,的类型信息,其值为,int,或,r,,则,产生式,EE,(1),op E,(2),的语义动作中,关于,E.MODE,的语义规则可定义为:,if E,1,.MODE,int AND E,2,.MODE,int then E.MODE:=int else E.MODE:=r,天津财经大学信息科学与技术系,3,、类型转换(续),EE,(1),op E,(2),的语义程序应该修改,必要时产生对运算量进行类型转换的四元式:,(itr,A,-,T),,表示把整型,A,转换成实型量,结果存于,T,中。,例:假定输入串为,X:=Y+I*J,,其中,X,Y,为实型,,I,J,为整型,则其产生的四元式为:,(1)(,*,i,I,J,T,1,)(2)(itr,T,1,-,T,2,)(3)(,+,r,Y,T,2,T,3,)(4)(:=,T,3,-,X),例:关于产生式,EE,(1),op E,(2),的语义子程序更为具体的描述为:,天津财经大学信息科学与技术系,T:=NEWTEMP;,IF E,1,.MODE=int AND E,2,.MODE=int THEN,BEGIN GEN(op,i,E,1,.PLACE,E,2,.PLACE,T);E.MODE:=int END,ELSE IF E,1,.MODE=r AND E,2,.MODE=r THEN,BEGIN GEN(op,r,E,1,.PLACE,E,2,.PLACE,T);E.MODE:=r END,ELSE IF E,1,.MODE=int,/*AND E,2,.MODE=r*/,THEN,BEGIN,U:=NEWTEMP;GEN(itr,E,1,.PLACE,-,U);,GEN(op,r,U,E,2,.PLACE,T);E.MODE:=r,END,ELSE,/*E,1,.MODE=r AND E,2,.MODE=int */,BEGIN,U:=NEWTEMP;GEN(itr,E,2,.PLACE,-,U);,GEN(op,r,E,2,.PLACE,U,T);E.MODE:=r,END,E.PLACE:=T,EE,(1),op E,(2),天津财经大学信息科学与技术系,布尔表达式的两个作用:,用于逻辑运算,计算逻辑值,作为控制语句,(,如,if-then,while),的条件表达式,布尔表达式由布尔算符(,not,and,or,)作用于布尔变量(或常数)或关系表达式而形成的。,关系表达式的形式:,E,1,rop E,2,,,rop,是,关系算符,(,如,=),布尔表达式到四元式的翻译,天津财经大学信息科学与技术系,为简单起见,只考虑如下形式的布尔表达式的翻译,文法,(6.2),E,E or E|E and E|not E|(E)|id rop id|id,布尔算符,的优先顺序(从高到低)为:,not,and,or,,且,and,和,or,都服从左结合,,not,服从右结合,关系算符,的优先级都相同,而且高于任何布尔算符,低于任何算术算符,布尔表达式到四元式的翻译,-,续,天津财经大学信息科学与技术系,1.,布尔表达式的计算方法:,采用两种方法:数值表示的,直接计算,与逻辑表示的,短路计算,直接计算与算术表达式计算方法基本相同,如:,1 or 0 and 1=1 or 0,的结果为:,1,短路计算即布尔表达式计算到某一部分就可以得到结果,而无需对布尔表达式进行完全计算。可以用,if-then-else,来解释,A or B if A then true else B,A and Bif A then B else false,not Aif A then false else true,而且多个四元式可能有相同的出口,四元式比三元式更便于优化,not Aif A then false else true,逆波兰表示法很容易扩充到表达式以外的范围,(6)(j,-,-,E.,L2:if cd goto L3,将运算对象写在前面,把运算符写在后面,因而也称后缀式。,简单赋值语句到四元式的翻译,A:=-B*(C+D),(1)(*,b,c),A_T1 _ _C_D,布尔表达式由布尔算符(not,and,or)作用于布尔变量(或常数)或关系表达式而形成的。,用于“自下而上”传递信息,EE(1)+E(2),(/,E,T5,T6),叶子结点代表运算量,非叶子结点代表运算符,逆波兰表示法很容易扩充到表达式以外的范围,天津财经大学信息科学与技术系,2,、直接计算的语法制导翻译,布尔表达式有两种翻译方法。(视计算机硬件条件来确定,如果执行条件转移效率较低,就用第一种方法),直接计算的语法制导翻译,如同翻译算术表达式一样来翻译布尔表达式,如:,A or B and not C,被翻译成:,(1)(not,C,-,T,1,),(2)(and,B,T,1,T,2,),(3)(or,A,T,2,T,3,),天津财经大学信息科学与技术系,3.,作为条件控制的布尔式翻译,基本翻译方法,当布尔表达式用于控制条件时,并不需要计算表达式的值,而是一旦确定了表达式为真或为假,就将控制转向相应的代码序列。,S,2,的代码,S,1,的代码,E,的代码,E.false,E.true,if E then S,1,else S,2,为布尔表达式,E,引入两个新的属性:,E.true,:表达式的真出口,它指向表达式为真时的转向,E.false,:表达式的假出口,它指向表达式为假时的转向,天津财经大学信息科学与技术系,把布尔表达式,E,翻译成下述形式的条件转移和无条件转移的四元式序列:,(jnz,A,-,p),若,A,为真,则转向四元式,p,(jrop,A,B,p),若,A rop B,为真,则转向四元式,p,(j,-,-,p),无条件转向四元式,p,3.,作为条件控制的布尔式翻译,-,续,(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)(,关于,S,1,的四元式序列,),(p)(j,-,-,q,),跳过,S,2,的代码段,(p+1)(,关于,S,2,的四元式序列,),(q),(1)-(4),是布尔式,A or BD,翻译产生的代码,全部是条件转移和无条件转移四元式,没有布尔运算。,例:,if,A or BD,then S,1,else S,2,翻译成如下四元式序列,天津财经大学信息科学与技术系,具体说明如下:,用,E.true,和,E.false,分别表示,E,的“真”和“假”出口转移目标,在翻译,E,时并未能确定。,对于,E,为,a rop b,形式,生成代码如下:,(jrop,a,b,E.true),(j,E.false),以结构图表示:,E,的代码,E.false,E.true,MODE=r THEN,F是关于属性的断言的有穷集。,i中的V是不是变量,而且是记录类型?i是不是该记录的域名?,(1)(*,b,c,t1),ELSE IF E1.,(6)(j,-,-,E.,天津财经大学信息科学与技术系,If-then,if-then-else的翻译参见上面的方法。,(p+1)(关于S2的四元式序列),天津财经大学信息科学与技术系,天津财经大学信息科学与技术系,天津财经大学信息科学与技术系,对于,E,为,E,1,or E,2,的形式,生成代码结构如下:,E,1,.,的代码,E,2,.,的代码,E,1,.false,E,2,.false,E.false,E,1,.true,E,2,.true,E.true,若,E,1,为真,则可知,E,为真,即,E,1,的真出口和,E,的真出口一样;若,E,1,为假,则必须计算,E,2,,因此,E,1,的假出口应是,E,2,代码的第一个四元式序号;,E,2,的真出口和假出口分别与,E,的真出口和假出口一样,天津财经大学信息科学与技术系,E,1,.,的代码,E,2,.,的代码,E,1,.false,E,2,.false,E.false,E,1,.true,E,2,.true,E.true,对于,E,为,E,1,and E,2,的形式,生成代码结构如下:,对于,E,为,not E,1,形式,只需调换,E,1,的真假出口,即可得到,E,的真假出口。,天津财经大学信息科学与技术系,例:,E,为,af,,翻译为四元式序列:,(,1,),(j,a,b,E.true,),(,2,),(j,-,-,(3),(,3,),(j,e,f,E.true,),(,6,),(j,-,-,E.false,),举例,真假出口的拉链与回填,在把布尔式翻译成一串条件转和无条件转四元式时,真假出口未能在生成四元式时确定;而且多个四元式可能有相同的出口,天津财经大学信息科学与技术系,说明:,E.true,和,E.false,不能在产生四元式的同时确定,要等将来目标明确时再回填,为此要记录这些要回填的四元式。,通常采用“拉链”的办法,把需要回填,E.true,的四元式拉成一条“真”链,把需要回填,E.false,的四元式拉成一条“假”链。,if,af,then S,1,else S,2,翻译为四元式序列:,(,1,),(j,a,b,(7),),(,2,),(jump,-,-,(3),(,3,),(j,e,f,(7),),(,6,),(jump,-,-,(p+1),),(,7,),(,关于,S,1,的四元式,),(,p,),(jump,-,-,q),(p+1),(,关于,S,2,的四元式,),(q),天津财经大学信息科学与技术系,练习:,把下面的语句翻译成四元式序列:,If,AB or CD,then X:=Y else X:=Y=1,100(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,是对应布尔式,AB or C=,C,D,106),。但这些是下一阶段代码优化要讨论的问题,暂不讨论。,天津财经大学信息科学与技术系,控制语句的翻译,以,if,语句,,while,语句为例说明控制语句的翻译方法,S,if E then S,1,if,语句,|if E then S,1,else S,2,if,语句,|while E do Swhile,语句,其中:,E:,布尔表达式,,S,,,S,1,S,2,为语句,天津财经大学信息科学与技术系,E,1,=1,E,2,=1,S,1,S,2,S,3,end,start,Yes,No,Yes,No,条件转移语句的共同特点是:根据布尔表达式取值,分别执行不同的语句序列。,问题,:不同的语句序列结束后,如何使控制转向语句的结束。例如:,if E,1,then,if E,2,then S,1,else S,2,else S,3,If-then,if-then-else,的翻译参见上面的方法。下面主要考虑,while,语句的翻译,天津财经大学信息科学与技术系,While,语句的翻译,while E do S,1,代码结构,E.true,S,1,的代码,E,的代码,E.false,begin,:,天津财经大学信息科学与技术系,考虑如下语句,while ab do,if cd then x:=y+z,else x:=y-z,的翻译模式。,L1:if ab goto L2,goto Lnext,L2:if cd goto L3,goto L4,L3:T1:=y+z,x:=T1,goto L1,L4:T1:=y-z,x:=T1,goto L1,Lnext:,L1,L2,L3,L4,Lnext,:语句标号;,L1:while,条件成立时,则去执行,L2(if,条件判断,),,否则,退出,while,循环语句;,L2:if,条件语句成立,则去执行,then,语句,L3,,不成立则去执行,else,语句,L4,,执行完返回,while,;,L3:then,语句的四元式序列;,L4:else,语句的四元式序列;,Lnext:while,后的语句序列。,天津财经大学信息科学与技术系,把上述语句翻译成四元式为:,while ab do,if cd then x:=y+z,else x:=y-z,100(j,a,b,102,),101(j,-,-,110,),102(j,c,d,104,),103(j,-,-,107,),104(+,y,z,T,1,),105(:=,x,-,T,1,),106(j,-,-,100,),107(-,y,z,T,2,),108(:=,x,-,T,2,),109(j,-,-,100,),110,L1,L2,L3,L4,Lnext,
展开阅读全文