最新【考研计算机专业课】天津大学 编译原理讲义 表达式的翻译5.2.4-5.3(共44张PPT课件).pptx
《最新【考研计算机专业课】天津大学 编译原理讲义 表达式的翻译5.2.4-5.3(共44张PPT课件).pptx》由会员分享,可在线阅读,更多相关《最新【考研计算机专业课】天津大学 编译原理讲义 表达式的翻译5.2.4-5.3(共44张PPT课件).pptx(44页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、5.2.4 四元四元(s yun)式表示式表示法法 四元四元(s yun)式式是一种普遍采用的中间代码形式,每个四元式包括四是一种普遍采用的中间代码形式,每个四元式包括四个组成部分个组成部分: OP,ARG1,ARG2, RESULT,表示形式为四元组,表示形式为四元组 ( OP, ARG1, ARG2, RESULT )。 其中其中(qzhng): OP算符。算符。 ARG1,ARG2运算量。运算量。 RESULT运算结果。运算结果。 第一页,共四十四页。例例,赋值语句,赋值语句(yj) A := - - B * ( C + D ) 可表示成四元式表可表示成四元式表: 凡只需一个运算量的算符
2、凡只需一个运算量的算符( (单目单目运算符运算符) ),一律,一律(yl)(yl)使用使用ARG1。 T1 临时变量临时变量T1B(1)T2 临时变量临时变量T2DC+(2)T3 临时变量临时变量T3T2T1*(3)赋值运算赋值运算AT3:=(4)注解注解RESULTARG2ARG1OP序号序号运算量和运算结果运算量和运算结果有时指用户自定义的变量,有时指编译程序有时指用户自定义的变量,有时指编译程序(bin y chn x)引进的临时变量。引进的临时变量。 第二页,共四十四页。四元式间的联系是通过四元式间的联系是通过临时临时(ln sh)(ln sh)变量变量实现的,这样更实现的,这样更改四
3、元式表很容易。改四元式表很容易。 相对来说,更改相对来说,更改(gnggi)(gnggi)三元式比较困难,因为它意味着必须改三元式比较困难,因为它意味着必须改变其中一系列指示器的值。变其中一系列指示器的值。 在对中间代码进行优化处理时,四元式比三元在对中间代码进行优化处理时,四元式比三元(sn yun)(sn yun)式式方便。方便。 第三页,共四十四页。学习学习(xux)要点要点: 熟悉语法制导翻译熟悉语法制导翻译(fny)的过程。的过程。 掌握掌握(zhngw)各种语法结构生成的中间代码。各种语法结构生成的中间代码。 了解语义子程序的设计。了解语义子程序的设计。第四页,共四十四页。5.3
4、表达式及赋值语句表达式及赋值语句(yj)(yj)的翻的翻译译 5.3.1 算术表达式与赋值语句算术表达式与赋值语句(yj)(yj)的翻译的翻译 1. 只含只含整型变量整型变量的简单赋值语句的简单赋值语句(yj)(yj)的翻译的翻译 A i := E E E + E | | E * E | | - - E | | ( E ) | | i 第五页,共四十四页。例例,X:=5+6*7为了实现翻译为了实现翻译(fny)(fny),需要定义一系列语义变量和语义过程。,需要定义一系列语义变量和语义过程。 生成生成(shn chn)四元式为四元式为:(*,6,7 ,T1)(+,5,T1,T2)(:=,T2,
5、 ,X)第六页,共四十四页。语义变量语义变量(binling)(binling)和语义过程和语义过程: : NEWTEMP: : 函数过程,产生临时函数过程,产生临时(ln sh)(ln sh)变量,每次调用时,变量,每次调用时,回送一个代表新临时回送一个代表新临时(ln sh)(ln sh)变量名的整数码作为函数值,临变量名的整数码作为函数值,临时时(ln sh)(ln sh)变量名产生顺序可想象为变量名产生顺序可想象为T1,T2 。 ENTRY(i): : 函数过程,查找并取得与函数过程,查找并取得与i i相对应的标识符在符号表相对应的标识符在符号表中的位置中的位置(wi zhi)(wi
6、zhi)( (入口入口) ),简称,简称i i值值。 E.PLACE: : 与与E 有联系的语义变量,表示存放有联系的语义变量,表示存放E值值的变量名在符号表的变量名在符号表入口或整数码入口或整数码 (若此变量是一个临时变量若此变量是一个临时变量) )。 GEN(OP, ARG1, ARG2, RESULT): : 语义过程,将四元式语义过程,将四元式(OP, ARG1, ARG2, RESULT)填进四元式表中。填进四元式表中。 第七页,共四十四页。上述上述(shngsh)文法的文法的语义动作描述语义动作描述:产生产生(chnshng)(chnshng)式式 语义动作语义动作 (1) A i
7、 := E GEN ( := , E.PLACE , , ENTRY(i)(2) 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 =NEWTEMP; GEN ( , E(1).PLACE , , E.PLACE)(5) E ( E(1) ) E.PLACE = E(1).PLACE (6)
8、 E i E.PLACE =ENTRY ( i )第八页,共四十四页。输入输入(shr)(shr) 栈栈 PLACE 四四元式元式 A := - - B * ( C + D ) := - - B * ( C + D ) i - - B * ( C + D ) i := A_ B * ( C + D ) i := - - A_ _ * ( C + D ) i := - -i A_ _B * ( C + D ) i := - -E A_ _B ( , B , T1 ) * ( C + D ) i := E A_T1 ( C + D ) i := E * A_T1_ C + D ) i := E *
9、 ( A_T1_ _+ D ) i := E * ( i A_T1_ _C + D ) i := E * ( E A_T1_ _C 例例,A := - - B * ( C + D ) 的语法制导的语法制导(zhdo)翻译过程翻译过程 i:= - -i * (i + i) 第九页,共四十四页。D ) i := E * ( E + A_T1_ _C_ ) i := E * ( E + i A_T1_ _C_D ) i := E * ( E + E A_T1_ _C_D ( + , C , D , T2 ) ) i := E * ( E A_T1_ _T2 i := E * ( E ) A_T1_
10、_T2_ i := E * E A_T1_T2 (* , T1, T2 , T3) i := E A_T3 ( := , T3 , A ) A 输入输入(shr)(shr) 栈栈 PLACE 四元式四元式 最终生成最终生成:( , B , T1 )( + , C , D , T2 )(* , T1, T2 , T3)( := , T3 , A )第十页,共四十四页。2. 类型转换类型转换 一个表达式中可能出现各种不同类型的变量一个表达式中可能出现各种不同类型的变量(binling)(binling)和常数。和常数。 所以,编译程序必须做到所以,编译程序必须做到: : 或者或者(huzh)(hu
11、zh)拒绝接受某种混合运算,拒绝接受某种混合运算,或者或者(huzh)(huzh)产生有关类型转换的指令。产生有关类型转换的指令。 A i := E E E + E | | E * E | | - - E | | ( E ) | | i 文法中的文法中的 i 既可是整型量,又可是实型量。当两个不同类型既可是整型量,又可是实型量。当两个不同类型的量进行运算时,规定首先必须把整型量转换成实型量。的量进行运算时,规定首先必须把整型量转换成实型量。 第十一页,共四十四页。(1)(1) 为实现为实现(shxin)(shxin)类型转换,每个非终结符的语义值必须类型转换,每个非终结符的语义值必须增加类型信
12、息增加类型信息。用用E.MODE表示表示(biosh)(biosh),取值为,取值为r (实型实型)或或int (整型整型)。 例,例,对于整形运算,产生式对于整形运算,产生式 E E(1) op E(2),E.MODE的语的语义规则义规则(guz)(guz)将定义为将定义为: : if ( (E(1).MODE =int) & (E(2) .MODE=int) )E.MODE = int;第十二页,共四十四页。(2)(2) 在四元式中增加一个整型变量在四元式中增加一个整型变量(binling)(binling)转换为实型变量转换为实型变量(binling)(binling)的四元式的四元式:
13、 : ( itr , A , T ),同时在运算符上应指出相同时在运算符上应指出相应的类型,这里规定用上角标表示应的类型,这里规定用上角标表示( (opi i,opr r) )。 例例,赋值语句,赋值语句: : X :=Y + I * J其中其中: : X, Y为实型为实型;I, J为整型为整型 它产生它产生(chnshng)(chnshng)的四元式为的四元式为: : ( *i , I , J , T1 )( itr , T1, T2 )( + +r , Y ,T2 , T3)( := , T3 , X )第十三页,共四十四页。产生产生(chnshng)(chnshng)式式: : E E(
14、1) op E(2) 的语义子程序的描述是的语义子程序的描述是: : if (E(1).MODE = int) & (E(2).MODE = int) GEN( opi , E(1).PLACE, E(2).PLACE, T ); E.MODE = int; else if (E(1).MODE = r) & (E(2).MODE = r) GEN( opr , E(1).PLACE, E(2).PLACE, T ); E.MODE = r; T = NEWTEMP;第十四页,共四十四页。else if (E(1).MODE = int) /* & (E(2).MODE = r) */ U =
15、 NEWTEMP; GEN( itr , E(1).PLACE, U ); GEN( opr , U , E(2).PLACE , T ); E.MODE = r;else /* (E(1).MODE = r) & (E(2).MODE = int) */ U = NEWTEMP; GEN( itr , E(2).PLACE, U ); GEN( opr , E(1).PLACE ,U , T ); E.MODE = r;E.PLACE = T;第十五页,共四十四页。输入输入(shr)(shr) 栈栈 PLACE 四元式四元式 X :=Y + I * J:=Y + I * J i Y + I
16、* J i := X_ + I * J i := i X_ Y + I * J i := E X_ YI * J i := E + X_Y_ * J i := E + i X_Y_I * J i := E + E X_Y_I例例,X :=Y + I * J的语法制导的语法制导(zhdo)翻译过程翻译过程 i := i + i * i第十六页,共四十四页。J i := E + E * X_Y_I_i := E + E * i X_Y_I_Ji := E + E * E X_Y_I_J ( *i i , I , J , T1 ) i := E X_T3 ( := , T3, , X )i := E
17、 + E X_Y_T1 ( itr , T1, T2 )( + +r , Y ,T2 , T3)输入输入(shr)(shr) 栈栈 PLACE 四元式四元式 A 第十七页,共四十四页。5.3.2 布尔表达式的翻译布尔表达式的翻译(fny)(fny) 布尔表达式在程序语言中有两个布尔表达式在程序语言中有两个(lin )(lin )基本功用基本功用: : 一是作为控制一是作为控制(kngzh)(kngzh)语句语句( (如如 if 或或 while 语句语句) )的条件式;的条件式; 二是作逻辑运算,获得逻辑值。二是作逻辑运算,获得逻辑值。 If X=0 then Y:=3 ;1 ( ( 0 0
18、) ) 0第十八页,共四十四页。布尔表达式由布尔表达式由布尔算符布尔算符作用于作用于布尔变量布尔变量或或常量常量(chngling)(chngling),或,或关关系表达式系表达式而形成的。而形成的。 布尔算符布尔算符( (按优先级按优先级) )有有: (: (非非) ),(与与) ),(或或) )。 关系关系(gun x)(gun x)符符rop有有: : , 布尔变量布尔变量(binling)(binling): : Boolean : : A,B,C。 布尔常量布尔常量: : true,false,1,0。 关系表达式是由关系符作用于算术表达式而形成,如关系表达式是由关系符作用于算术表达
19、式而形成,如E1 rop E2。布尔表达式的文法布尔表达式的文法: :E EE| | EE | |E| | (E)| | i | | i rop i 第十九页,共四十四页。计算计算(j sun)(j sun)布尔表达式的值布尔表达式的值: : 1. 直接直接(zhji)(zhji)计算计算 按算术表达式的计算方式按算术表达式的计算方式(fngsh)(fngsh)根据布尔运算符的优先级和结合根据布尔运算符的优先级和结合关系计算布尔表达式。关系计算布尔表达式。 例例,令令true=1,false=0,计算布尔表达式,计算布尔表达式: :1(00)000)0= = 1(10)01(10)0= = 1
20、00100= = 1010= = 1 1第二十页,共四十四页。2. 采用采用(ciyng)(ciyng)某种优化措施来计算某种优化措施来计算 计算计算AB,只要计算出,只要计算出A=1,则不必再算,则不必再算B,可知,可知(k zh)(k zh)结果为结果为1; 计算计算AB,只要,只要(zhyo)(zhyo)计算出计算出A=0,则不必再算,则不必再算B,可知结果为,可知结果为0; 用条件句来解释布尔计算用条件句来解释布尔计算:AB解释为解释为 if A then true else B AB解释为解释为 if A then B else false A解释为解释为 if A then fal
21、se else true 第二十一页,共四十四页。针对两种算法有两种不同针对两种算法有两种不同(b tn)(b tn)的翻译方的翻译方法。法。 优化优化计算条件语句计算条件语句(yj)的翻译的翻译:条件条件(tiojin)(tiojin)语句语句 if E then S1 else S2 中的布尔式中的布尔式E,它的,它的作用在于控制对作用在于控制对 S1 和和 S2 的选择。的选择。 E的代码的代码S1的代码的代码S2的代码的代码真真假假第二十二页,共四十四页。为了表述真、假出口,引入三种形式为了表述真、假出口,引入三种形式(xngsh)(xngsh)的四元式的四元式: : (1) ( jn
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 考研计算机专业课 最新【考研计算机专业课】天津大学 编译原理讲义 表达式的翻译5.2.4-5.3共44张PPT课件 最新 考研 计算机 专业课 天津大学 编译 原理 讲义 表达式 翻译 5.2 5.3
链接地址:https://www.taowenge.com/p-34198881.html
限制150内