语义分析和中间代码生成课件.ppt

上传人:石*** 文档编号:47507330 上传时间:2022-10-02 格式:PPT 页数:66 大小:3.59MB
返回 下载 相关 举报
语义分析和中间代码生成课件.ppt_第1页
第1页 / 共66页
语义分析和中间代码生成课件.ppt_第2页
第2页 / 共66页
点击查看更多>>
资源描述

《语义分析和中间代码生成课件.ppt》由会员分享,可在线阅读,更多相关《语义分析和中间代码生成课件.ppt(66页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、语义分析和中间代码生成语义分析和中间代码生成第1页,此课件共66页哦翻译为中间语言的好处翻译为中间语言的好处(1 1)便于进行与机器无关的代码优化;)便于进行与机器无关的代码优化;(2 2)使编译程序改变目标机更容易;易于编译器的)使编译程序改变目标机更容易;易于编译器的移植移植(3 3)使编译程序的结构在逻辑上更为简单明确,以中)使编译程序的结构在逻辑上更为简单明确,以中间语言为界面,编译前端和后端的接口更清晰。间语言为界面,编译前端和后端的接口更清晰。第2页,此课件共66页哦主要内容主要内容中间语言的形式中间语言的形式后缀式,图表方法,三元式后缀式,图表方法,三元式编译过程中不同语言的翻译

2、或处理方法编译过程中不同语言的翻译或处理方法说明语句的翻译说明语句的翻译赋值语句的翻译赋值语句的翻译布尔表达式的翻译布尔表达式的翻译控制语句的翻译控制语句的翻译第3页,此课件共66页哦7.17.1中间语言中间语言 中间语言的形式:中间语言的形式:逆波兰表示:后缀式逆波兰表示:后缀式图表示法:图表示法:DAG DAG 和和ASTAST三地址代码三地址代码:四元式、三元式、间接三元式四元式、三元式、间接三元式 第4页,此课件共66页哦7.1.1 7.1.1 后缀式后缀式 后缀式表示法又称逆波兰表示法。这种方法是,把运算量(操作数)写在前后缀式表示法又称逆波兰表示法。这种方法是,把运算量(操作数)写

3、在前面,把算符写在后面(后缀)。面,把算符写在后面(后缀)。一个表达式的后缀式可以如下定义:一个表达式的后缀式可以如下定义:(1 1)如果)如果E E是一个变量或常量,则是一个变量或常量,则E E的后缀式是的后缀式是E E自身。自身。(2 2)如果)如果E E是是E1 op E2E1 op E2形式的表达式,这里形式的表达式,这里opop是任何二元操作符,则是任何二元操作符,则E E的后缀式为的后缀式为 E1E1 E2 E2op,op,这里这里E1E1 和和E2E2分别为分别为E1E1和和E2E2的后缀式。的后缀式。(3 3)如果)如果E E是是(E1)(E1)形式的表达式,则形式的表达式,则

4、E1E1的后缀式就是的后缀式就是E E的后缀式。的后缀式。第5页,此课件共66页哦后缀式的优点 便于计算机处理便于计算机处理,因为在后缀式中,表达式,因为在后缀式中,表达式的求值顺序与运算符出现的顺序一致,这样只的求值顺序与运算符出现的顺序一致,这样只要用一个栈就可以实现表达式的求值。要用一个栈就可以实现表达式的求值。实现过程:自左向右扫描后缀表达式;遇到运算实现过程:自左向右扫描后缀表达式;遇到运算对象入栈,遇到对象入栈,遇到N元运算符,就从栈顶取出元运算符,就从栈顶取出N个运算个运算对象进行计算,再将结果入栈;当全部后缀表达对象进行计算,再将结果入栈;当全部后缀表达式扫描结束,则栈顶的值即

5、为表达式结果。式扫描结束,则栈顶的值即为表达式结果。第6页,此课件共66页哦后缀式特点:后缀式特点:无括号无括号运算对象的顺序与中缀式一致运算对象的顺序与中缀式一致根据操作符(运算符)的优先级和结合性根据操作符(运算符)的优先级和结合性进行相关的处理进行相关的处理例:例:5+4*65 4 6*+第7页,此课件共66页哦7.1.2 图表示法图表示法图表示法包括图表示法包括DAG与与AST(抽象语法树抽象语法树)。有向无环图(有向无环图(Directed Acyclic Graph,简称简称 DAG).与抽象语法树一样,对于表达式中的每个子表达式,与抽象语法树一样,对于表达式中的每个子表达式,DA

6、G图中都图中都有一个结点。一个内部结点代表一个操作符,它的孩子代表操作数。有一个结点。一个内部结点代表一个操作符,它的孩子代表操作数。两者不同的是,在两者不同的是,在DAG图中代表公共子表达式的结点具有多个父图中代表公共子表达式的结点具有多个父结点,而在一棵抽象语法树中公共子表达式被表示为重复的子结点,而在一棵抽象语法树中公共子表达式被表示为重复的子树。树。例:例:第8页,此课件共66页哦5+4*6的的DAG图图5+64*5+4*6+4*6 的的DAG图图5+64*+5+4*6+4*6 的的AST图图5+64*+64*第9页,此课件共66页哦后缀式与抽象语法树的关系后缀式与抽象语法树的关系后缀

7、式是抽象语法树的线性表示:每个结点都是在它的所有后缀式是抽象语法树的线性表示:每个结点都是在它的所有子节点之后立即出现的。子节点之后立即出现的。通过对抽象语法树的不同形式的遍历可以形成不同形式通过对抽象语法树的不同形式的遍历可以形成不同形式的缀式表达式的缀式表达式前序遍历:前缀式前序遍历:前缀式中序遍历:中缀式中序遍历:中缀式后序遍历:后缀式后序遍历:后缀式5+64*+64*第10页,此课件共66页哦产生赋值语句抽象语法树的属性文法产生赋值语句抽象语法树的属性文法S.nptr:=mknode(assign,mkleaf(id,id.place),E.nptr)E.nptr:=mknode(+,

8、E1.nptr,E2.nptr)E.nptr:=mknode(*,E1.nptr,E2.nptr)mkleaf(id,id.place)Sid:=EEE1+E2EE1*E2 E-id产生式产生式语义规则语义规则第11页,此课件共66页哦S.nptr:=mknode(assign,mkleaf(id,id.place),E.nptr)E.nptr:=mknode(+,E1.nptr,E2.nptr)E.nptr:=mknode(*,E1.nptr,E2.nptr)E.nptr:=mkleaf(id,id.place)mkleaf(id,id.place)Sid:=EEE1+E2EE1*E2E-i

9、d a:=b+cabc+:=第12页,此课件共66页哦抽象语法树的存储表示抽象语法树的存储表示二叉树的形式二叉树的形式:算术运算通常都是二元:算术运算通常都是二元运算运算树中每个节点包含三个域:树中每个节点包含三个域:数组的形式表示数组的形式表示:每一个数组元素形式:每一个数组元素形式如下:如下:节点类型节点类型|操作数操作数1|操作数操作数2节点类型节点类型|操作数操作数1|操作数操作数2第13页,此课件共66页哦*uminus id c id b 赋值语句:赋值语句:a:=b*-c+b*-c后缀式:后缀式:a b c uminus*b c uminus*+assignassign +*um

10、inus id a id c id b id b id c unimus 1 *0 2 id b id c unimus 5 *4 6 +3 7 id a assign 9 8 .第14页,此课件共66页哦7.1.3 三地址代码三地址代码三地址代码是由下面一般形式的语句构成的序列三地址代码是由下面一般形式的语句构成的序列:X:=y op z 其中,其中,x、y、z为名字、常数或编译时产生的为名字、常数或编译时产生的临时变量临时变量(存放中间结果,对应于语法树的内部节点);(存放中间结果,对应于语法树的内部节点);op代表运算符号如定点运算符、浮点运算符、逻辑运算代表运算符号如定点运算符、浮点运

11、算符、逻辑运算符等。符等。每个语句的右边只能有一个运算符每个语句的右边只能有一个运算符。每条语句通常包含三个地址:两个操作数地址,一个操作结果每条语句通常包含三个地址:两个操作数地址,一个操作结果地址地址第15页,此课件共66页哦三地址码示例t1 t1:-c -c t2 t2:b*t1 b*t1 t3 t3:-c -c t4 t4:b*t3 b*t3 t5 t5:t2+t4 t2+t4 a a:t5 t5 assigna+*bcuminus*uminuscba:=b*-c+b*-c第16页,此课件共66页哦三地址码示例(2)assigna+*bcuminust1t1:-c-c t2 t2:b*

12、t1 b*t1 t5t5:t2+t2 t2+t2 a a:=t5=t5 a:=b*-c+b*-c第17页,此课件共66页哦三地址代码的具体表示1四元式:四元式:op,arg1,arg2,result(0)(1)(2)(3)(4)(5)uminus*uminus*+assigncbcbt2t5arg1t1t3t4arg2 resultt1t2t3t4t5aop t1:-c t2:b*t1 t3:-c t4:b*t3 t5:t2+t4 a:t5 a:=b*(-c)+b*(-c)第18页,此课件共66页哦三地址代码的具体表示2.三元式三元式:op,arg1,arg2(0)(1)(2)(3)(4)(5

13、)uminus*uminus*+assigncbcb(1)aarg1(0)(2)(3)(4)arg2op t1:-c t2:b*t1 t3:-c t4:b*t3 t5:t2+t4 a:t5 a:=b*(-c)+b*(-c)第19页,此课件共66页哦三地址代码的具体表示3.间接三元式间接三元式:间接码表间接码表+三元式表三元式表目的:便于优化处理目的:便于优化处理t1:-ct2:b*t1t3:-c t4:b*t3t5:t2+t4a:t5(1)(2)(3)(4)uminus*+assigncb(2)aarg1(1)(2)(3)arg2op间接代码表间接代码表(1)(2)(1)(2)(3)(4)a:

14、=b*(-c)+b*(-c)第20页,此课件共66页哦t1:a+bt2:t1*cX:t2t3:a+bt4:dt3Y:t4(1)(2)(3)(4)(5)+*:=:=a(1)xdYarg1bc(2)(1)(4)arg2op间接代码表间接代码表(1)(2)(3)(1)(4)(5)X:=(a+b)*c Y:=d(a+b)第21页,此课件共66页哦语义分析中各种语句的处理语义分析中各种语句的处理说明语句的翻译说明语句的翻译赋值语句的翻译赋值语句的翻译布尔表达式的翻译布尔表达式的翻译控制语句的翻译控制语句的翻译第22页,此课件共66页哦7.2 说明语句的翻译说明语句的翻译说明语句的处理方式:不生成可执行代

15、码,只涉及符号表的说明语句的处理方式:不生成可执行代码,只涉及符号表的操作。操作。说明语句的处理说明语句的处理:对每个局部名字,在符号表中建立相应对每个局部名字,在符号表中建立相应的表项,填写有关的信息的表项,填写有关的信息 如类型、嵌套深度、相对地址如类型、嵌套深度、相对地址等。等。v相对地址:相对地址:相对静态数据区基址或活动记录中局相对静态数据区基址或活动记录中局部数据区基址的一个偏移值。部数据区基址的一个偏移值。第23页,此课件共66页哦因为因为每进入一次过程需分配一次内存每进入一次过程需分配一次内存,因此,因此在处理过程内的说明语句时,要分配每个标识在处理过程内的说明语句时,要分配每

16、个标识符的相对地址。设变量符的相对地址。设变量offset用来记录相对地址,用来记录相对地址,每次进入一个过程,先将每次进入一个过程,先将offset置为置为0。每次遇到。每次遇到一个新名字,则把名字同一个新名字,则把名字同offset的当前值一起录的当前值一起录入符号表,然后入符号表,然后offset的值增加,其增加的值由的值增加,其增加的值由该名字的数据类型所决定,称为数据对象的宽度,该名字的数据类型所决定,称为数据对象的宽度,用属性用属性width表示。假设表示。假设integer型对象宽度为型对象宽度为4,real型对象宽度为型对象宽度为8,则下表为过程中说明语,则下表为过程中说明语句

17、的翻译方案。句的翻译方案。第24页,此课件共66页哦过程中的说明语句的翻译过程中的说明语句的翻译PD offset:0 DD;D Did:T enter(id.name,T.type,offset););offset:=offsetT.width Tinteger T.type:=integer;T.width:=4 Treal T.type:real;T.width:8 Tarraynumof T1 T.type:array(num.val,T1.type););T.width:num.val*T1.width T T1 T.type:pointer(T1type););T.width:=4

18、第25页,此课件共66页哦7.3 赋值语句的翻译赋值语句的翻译在本节中赋值语句中的表达式的类型可以是整型、在本节中赋值语句中的表达式的类型可以是整型、实型、数组和记录。实型、数组和记录。作为翻译赋值语句为三地址代码的一部分作为翻译赋值语句为三地址代码的一部分,我们将我们将主要讨论主要讨论:简单赋值语句的翻译简单赋值语句的翻译 第26页,此课件共66页哦7.3.1 简单算术表达式及赋值语句的翻译简单算术表达式及赋值语句的翻译所讨论的简单赋值语句不包含对数组元素、记录元素的引用,仅包所讨论的简单赋值语句不包含对数组元素、记录元素的引用,仅包含对简单变量的算术表达式的引用。并且假定赋值语句中所有变量

19、均为同含对简单变量的算术表达式的引用。并且假定赋值语句中所有变量均为同一类型,不必考虑类型转换的问题。一类型,不必考虑类型转换的问题。简单赋值语句的文法简单赋值语句的文法Gs如下:如下:Sid:=EE E+T|TT T*F|FF(E)|id分析文法分析文法GS,可以看到文法中包含两类不同语义操作的产生式,可以看到文法中包含两类不同语义操作的产生式,一类含有运算符操作,一类仅含有传值操作。因此,要使语义分析后能产一类含有运算符操作,一类仅含有传值操作。因此,要使语义分析后能产生三地址语句中间代码,应该对这两类不同的产生式进行不同的处理,含生三地址语句中间代码,应该对这两类不同的产生式进行不同的处

20、理,含有运算符操作的产生式的语义动作应该产生相应的三地址语句,而仅含有有运算符操作的产生式的语义动作应该产生相应的三地址语句,而仅含有传值操作的产生式则只进行传值的语义处理。根据这种思想,可以构造出传值操作的产生式则只进行传值的语义处理。根据这种思想,可以构造出各产生式的语义子程序如下表所示。各产生式的语义子程序如下表所示。第27页,此课件共66页哦产生赋值语句三地址代码的翻译模式产生赋值语句三地址代码的翻译模式 Sid:=E p:=lookup(id.name);if pnil then emit(p:=E.place)else error EE1+E2E.place=newtemp;emi

21、t(E.place:=E1.place+E2.place)EE1*E2E.place=newtemp;emit(E.place:=E1.place*E2.place)E-E E.place:=newtemp;emit(E.place :=uminusE1.placeE(E1)E.place:=E1.place Eid p:=lookup(id.name);if pnil then E.place:=p else error 有关说明:有关说明:(1)(1)语义变量语义变量E Eplaceplace:表示存放:表示存放E E值的变量名在符号表的位置或一整数码值的变量名在符号表的位置或一整数码(若

22、若此变量是一个临时变量此变量是一个临时变量);(2)(2)语义变量语义变量ididnamename:表示单词:表示单词idid的名字;的名字;(3)(3)语义过程语义过程newtemp:newtemp:表示生成一个临时变量表示生成一个临时变量,每调用一次每调用一次,生成一新的临时变生成一新的临时变量;量;(4)(4)语义过程语义过程lookuplookup:表示检查:表示检查ididnamename是否出现在符号表中,若在则返回一指向是否出现在符号表中,若在则返回一指向该登记项的指针,否则返回该登记项的指针,否则返回nilnil:(5)(5)语义过程语义过程emitemit:表示产生三地址语句

23、并输出到文件上。:表示产生三地址语句并输出到文件上。第28页,此课件共66页哦t1:-c t2:b*t1 t3:-c t4:b*t3 t5:t2+t4 a:t5 assigna+*bcuminus*uminuscba:=b*-c+b*-c产生赋值语句三地址代码的翻译模式产生赋值语句三地址代码的翻译模式 Sid:=E p:=lookup(id.name);if pnil then emit(p:=E.place)else error EE1+E2 E.place=newtemp;emit(E.place:=E1.place+E2.place)EE1*E2 E.place=newtemp;emit

24、(E.place:=E1.place*E2.place)E-E E.place:=newtemp;emit(E.place :=uminusE1.placeE(E1)E.place:=E1.place Eid p:=lookup(id.name);if pnil then E.place:=p else error 第29页,此课件共66页哦7.4 布尔表达式的翻译布尔表达式布尔表达式:用布尔运算符号(用布尔运算符号(and,or,not)作用到布尔变量或关系表达式上而组成。作用到布尔变量或关系表达式上而组成。布尔表达式的作用:布尔表达式的作用:1.用作计算逻辑值用作计算逻辑值2.用作控制流语

25、句如用作控制流语句如if-then,if-then-else和和 while-do等之中的条件表达式等之中的条件表达式第30页,此课件共66页哦一个布尔表达式的值的计算一个布尔表达式的值的计算 方法一方法一:用数值表示真和假,从而对布尔表达式的求值,:用数值表示真和假,从而对布尔表达式的求值,可以象对算术表达式的求值那样一步一步地来计算可以象对算术表达式的求值那样一步一步地来计算 方法二方法二:优化的方法。:优化的方法。A or B 解释成解释成 if A then true else BA and B A and B 解释成解释成 if A then B else falseif A the

26、n B else falsenot A not A 解释成解释成 if A then false else trueif A then false else true第31页,此课件共66页哦7.4.1 数值表示法的翻译数值表示法的翻译(用作计算逻辑值)(用作计算逻辑值)用用1表示真,表示真,0表示假来实现布尔表达式的翻译表示假来实现布尔表达式的翻译例如,布尔表达式例如,布尔表达式:a or b and not c 翻译成三地址代码序列:翻译成三地址代码序列:100:t1:=not c 101:t2:=b and t1 102:t3:=a or t1 oraandbcnot第32页,此课件共6

27、6页哦关系表达式关系表达式:ab ab 等价于等价于if ab then 1 else 0 if ab then 1 else 0 翻译成三地址代码序列:翻译成三地址代码序列:100:if ab goto l03 101:t:=0 102:goto l04 103:t:=1 104:第33页,此课件共66页哦关于布尔表达式的数值表示法的翻译模式关于布尔表达式的数值表示法的翻译模式EE1 or E2 E.place:=newtemp;emit(E.place:=E1.place or E2.place)EE1 and E2E.place:=newtemp;emit(E.place:=E1.pla

28、ceand E2.place)Enot E1 E.place:=newtemp;emit(E.place:=not E1.place)第34页,此课件共66页哦Eid1 relop id2 注:注:relop是关系运算符是关系运算符 E.place:=newtemp;emit(if id1.place relop.op id2.place goto nextstat+3);emit(E.place:=0);emit(gotonextstat+2);emit(E.place:=1)Eture E.place:=newtemp;emit(E.place:=1)Efalse E.place:=new

29、temp;emit(E.place:=0)ab 的翻译:的翻译:100:if ab goto l03 101:t:=0 102:goto l04 103:t:=1 104:第35页,此课件共66页哦例:例:考虑如下语句:考虑如下语句:X=ab and cd or ef a bEandC dEor e fEEE100:if ab goto 103 101:t1=0102:goto 104103:t1=1104:if cd goto 107105:t2=0106:goto 108107:t2=1109:if ef goto 112110:t4=0111:goto 113112:t4=1X =S10

30、8:T3=t1 and t2113:T5=t3 or t4114:x:=t5第36页,此课件共66页哦7.4.2 作为条件控制语句的布尔表达式的翻译作为条件控制语句的布尔表达式的翻译(采用简化的方法进行布尔表达式的计算采用简化的方法进行布尔表达式的计算)文法:文法:if E then S1 else S2 E.codeS1.codeE.true:Goto s.nextE.false:to E.trueto E.false生成的代码结构:生成的代码结构:S2.codeS.next:第37页,此课件共66页哦控制语句中的条件表达式翻译的基本思想控制语句中的条件表达式翻译的基本思想给控制语句中的条件

31、表达式设两个属性:给控制语句中的条件表达式设两个属性:E.true,E.true,和和E.falseE.false,记录控制语句所转向的两个语,记录控制语句所转向的两个语句的标号。对条件表达式的翻译如下:句的标号。对条件表达式的翻译如下:E:ab,E:ab,生成如下的代码生成如下的代码If ab goto E.trueIf ab goto E.trueGoto E.falseGoto E.falseE.codeS1.codeE.true:Goto s.nextE.false:to E.trueto E.falseS2.codes.next:第38页,此课件共66页哦控制语句中的条件表达式翻译的

32、基本思想控制语句中的条件表达式翻译的基本思想假定假定E形如形如E1 or E2。若。若E1为真,则立即可知为真,则立即可知E为真,于是为真,于是E1.true与与E.true是相同的。若是相同的。若El为为false则必须对则必须对E2求值,因此求值,因此我们置我们置E1.false:为:为E2的代码的第一条指令的标号。而的代码的第一条指令的标号。而E2的真、的真、假出口可以分别与假出口可以分别与E的真、假出口相同。类似可考虑形如的真、假出口相同。类似可考虑形如E1 and E2的的E的翻译。至于形如的翻译。至于形如not E1的布尔表达式的布尔表达式E不必生成新的不必生成新的代码,只要把代码

33、,只要把E1的假、真出口作为的假、真出口作为E的真、假出口即可。按此的真、假出口即可。按此方式可以写出布尔表达式译成三地址代码的语义规则。方式可以写出布尔表达式译成三地址代码的语义规则。注意注意E的的true和和false属性均为继承属性。属性均为继承属性。E:E1 or E2E1.true=E.true,E1.false=E2的第一条代码的第一条代码E2.true=E.true,E2.false=E.false第39页,此课件共66页哦控制语句中的条件表达式翻译的基本思想控制语句中的条件表达式翻译的基本思想E:E1 or E2E1.true=E.trueE1.false=E2的第一条代码的第

34、一条代码E2.true=E.trueE2.false=E.falseE1.codeS1.codeE.true:Goto s.nextE.false:to E.trueto E.falseS2.codes.next:E2.codeto E.trueto E.false第40页,此课件共66页哦控制语句中的条件表达式翻译的基本思想控制语句中的条件表达式翻译的基本思想E:E1 and E2E:E1 and E2E1.true=E2E1.true=E2的第一条语句的第一条语句;E1.false=E.falseE1.false=E.falseE2.true=E.trueE2.true=E.true;E2

35、.false=E.falseE2.false=E.falseE1.codeS1.codeE.true:Goto s.nextE.false:to E.trueto E.falseS2.codes.next:E2.codeto E.trueto E.false第41页,此课件共66页哦产生式产生式语义规则语义规则EE1 or E2E1.true:=E.true;E1.false:=newlabel;E2.true:=E.true;E2.false:=E.false E.code:=E1.code|gen(E1.false:)|E2.code第42页,此课件共66页哦产生式产生式语义规则语义规则E

36、E1 and E2E1.true:=newlabel;E1.false:=E.false;E2.true:=E.true;E2.false:=E.false;E.code:=E1.code gen(E1.true:)E2.codeEnot E1 E1.true:=E.false;E1.false:=E.true;E.code:=E1.code 第43页,此课件共66页哦产生式产生式语义规则语义规则Eid1 relop id2E.code:=gen(if id1.place relop.op id2.place goto E.true)|gen(goto E.false)Etrue E.code

37、:=gen(goto E.true)Efalse E.code:=gen(goto E.false)E的的true和和false属性都是继承属性,属性都是继承属性,E.code是综合属性。因此该语义规是综合属性。因此该语义规则的不能通过一遍扫描完成。则的不能通过一遍扫描完成。E(E1)E1.true:=E.true;E1.false:=E.false;E.code:=E1.code 第44页,此课件共66页哦例:例:考虑如下语句:考虑如下语句:ab or cd and ef 假定整个表达式的真假出口分别置为假定整个表达式的真假出口分别置为Ltrue和和Lfalse a bEorC dEande

38、 fEEEif ab goto E.true goto E.falseif cd goto E.true goto E.falseif ef goto E.true goto E.falseif cd goto E.truegoto E.falseL2:if ef goto E.true goto E.falseif ab goto E.true goto E.falseL1:if cd goto E.true goto E.falseL2:if ef goto E.true goto E.false第45页,此课件共66页哦例:例:考虑如下语句:考虑如下语句:ab or cd and ef

39、ab or cd and ef 假定整个表达式的真假出口分别置为假定整个表达式的真假出口分别置为LtrueLtrue和和LfalseLfalsea bEorC dEande fEEEif cd goto L2goto LfalseL2:if ef goto Ltrue goto Lfalseif ab goto Ltrue goto L1L1:if cd goto L2 goto LfalseL2:if ef goto Ltrue goto LfalseL1:L2:if ab goto E.true goto E.falseif cd goto E.true goto E.falseif ef

40、 goto E.true goto E.false第46页,此课件共66页哦例:例:考虑如下语句:考虑如下语句:ab and cd or efa bEandC dEore fEEEif ab goto E.true goto E.falseif cd goto E.true goto E.falseif ef goto E.true goto E.falseif ab goto E.truegoto E.falseL1:if cd goto E.true goto E.falseif ab goto E.truegoto E.falsel1:if cd goto E.true goto E.f

41、alsel2:if ef goto E.true goto E.falseL1:L2:第47页,此课件共66页哦例:例:考虑如下语句:考虑如下语句:ab and cd or ef a bEandC dEore fEEEif ab goto E.truegoto E.falseL1:if cd goto E.true goto E.falseL2:if ef goto E.true goto E.falseL1:L2:if ab goto L1goto E.falseL1:if cd goto E.true goto L2L2:if ef goto E.true goto E.false第48页

42、,此课件共66页哦 我们假设实现三地址代码时采用四元式形式实现,并且假定:我们假设实现三地址代码时采用四元式形式实现,并且假定:(jnz,a,-,p)jnz,a,-,p)表示表示 if a goto pif a goto p (jrop,x,y,p)(jrop,x,y,p)表示表示 if x rop y goto pif x rop y goto p (j,-,-(j,-,-,p )p )表示表示 goto pgoto p第49页,此课件共66页哦控制语句中布尔表达式的翻译模式一遍扫描的一遍扫描的表达式翻译中存在的问题:表达式翻译中存在的问题:生成某些转移语句时,转移到的目标的标号是生成某些转

43、移语句时,转移到的目标的标号是未知的未知的解决方案:当目标语句的标号确定后,进行解决方案:当目标语句的标号确定后,进行回回填填第50页,此课件共66页哦用四元式表示用四元式表示1 1:(j,a,b,:(j,a,b,3 3)2 2:(j,-,-:(j,-,-,6 6)3:(+,a,1,t1)3:(+,a,1,t1)4:4:(:=,t1,-(:=,t1,-,a),a)5:5:(j,-,-,(j,-,-,8 8)6:(+,b,1,t2)6:(+,b,1,t2)7:7:(:=,t2,-(:=,t2,-,b),b)8 8:例:例:if ab then a:=a+1 else b:=b+1第51页,此课件

44、共66页哦7.5 控制语句的翻译控制语句的翻译任何程序都可有顺序结构、选择结构和任何程序都可有顺序结构、选择结构和while循环结构表示,循环结构表示,这三类结构可用如下的文法描述:这三类结构可用如下的文法描述:(1)Sif E then S (2)|if E then S else S (3)|while E do S (4)|begin L end (5)|A (6)LL;S (7)|S S表示语句表示语句 E为一个布尔表达式为一个布尔表达式L表示语句块表示语句块 A为赋值语句为赋值语句第52页,此课件共66页哦控制流语句的翻译模式控制流语句的翻译模式:1.Sif E then S1 的四

45、元式序列的四元式序列 1.(j,E,-,3)1.(j,E,-,3)2.(j,-,-,q)2.(j,-,-,q)3.3.q.q.S1的四元式序列的四元式序列第53页,此课件共66页哦2.Sif E then S1 else S2 的四元式序列的四元式序列 1.(j,E,-,3)2.(j,-,-,p+1)3.p.(j,-,-,q)p+1.q.S1的四元式序列的四元式序列S2的四元式序列的四元式序列第54页,此课件共66页哦3.S while E do S1 的四元式序列的四元式序列 1.(j,E,-,3)2.(j,-,-,p+1)3.p.(j,-,-,1)p+1.S1的四元式序列的四元式序列第55

46、页,此课件共66页哦(4)S begin L end (5)S A (6)LL;S (7)S S 1语句块语句块L的四元式序列的四元式序列赋值语句赋值语句A的四元式序列的四元式序列语句块语句块L的四元式序列的四元式序列语句语句S的四元式序列的四元式序列语句语句S1的四元式序列的四元式序列第56页,此课件共66页哦翻译为四元式翻译为四元式例:例:将语句将语句if ab or cd and ef then s1 else s21 (j,a,b,?)2 (j,-,-,?)3 (j,c,d,?)4 (j,-,-?)5 (j,e,f,?)6 (j,-,-,?)7 S1的四元式序列的四元式序列 p (j,

47、-,-,?)p+1 S2的四元式序列的四元式序列 q 1 (j,a,b,7)2 (j,-,-,3)3 (j,c,d,5)4 (j,-,-p+1)5 (j,e,f,7)6 (j,-,-,p+1 )7 S1的四元式序列的四元式序列 p (j,-,-,q)第57页,此课件共66页哦例:例:考虑如下语句:考虑如下语句:while ab do if cd then x:=yz 100(j,a,b,?)101 (j,-,-,?)106 (j,-,-,100)104 (+,y,z,T)105 (:=,T,-,x)102(j,c,d,?)103 (j,-,-,?)102(j,c,d,104)103 (j,-,

48、-,?)102(j,c,d,104)103 (j,-,-,100)100(j,a,b,102)101 (j,-,-,?)107 100(j,a,b,102)101 (j,-,-,107)第58页,此课件共66页哦例:例:写出下列语句的四元式:写出下列语句的四元式:if x=y+1 then x:=x*y else while x0 do begin x:=x-1;y:=y+2 end 100 (+,y,1,t1)101 (j=,x,t1,?)102 (j,-,-,?)103 (*,x,y,t2)104 (:=,t2,-,x)105 (j,-,-,?)106 (j,x,0,?)107 (j,-,

49、-,?)113 108 (-,x,1,t3)109 (:=,t3,-,x)110 (+,y,2,t4)111 (:=,t4,-,y)112 (j,-,-,?)100 (+,y,1,t1)101 (j=,x,t1,103)102 (j,-,-,106)103 (*,x,y,t2)104 (:=,t2,-,x)105 (j,-,-,113)106 (j,x,0,108)107 (j,-,-,113)108 (-,x,1,t3)109 (:=,t3,-,x)110 (+,y,2,t4)111 (:=,t4,-,y)112 (j,-,-,106)第59页,此课件共66页哦本章小结本章小结中间代码形式:

50、逆波兰式、图形表示、中间代码形式:逆波兰式、图形表示、三元式、间接三元式、四元式三元式、间接三元式、四元式语句翻译:说明语句的翻译、赋值语句语句翻译:说明语句的翻译、赋值语句的翻译、布尔表达式的翻译、控制语句的翻译、布尔表达式的翻译、控制语句的翻译的翻译第60页,此课件共66页哦习题一、多项选择一、多项选择A CB DA B C DAA第61页,此课件共66页哦二、判断题二、判断题第62页,此课件共66页哦三、解答题三、解答题1 1、把下列语句翻译为四元式序列、把下列语句翻译为四元式序列100 (j,A,C,?)101 (j,-,-,?)102(j,B,D,?)103(j,-,-,?)104

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁