当前位置:高等教育资讯网  >  中国高校课件下载中心  >  大学文库  >  浏览文档

西北工业大学:《编译原理》课程教学资源(PPT课件)第5章 语法制导翻译及中间代码生成(5.4-5.5)

资源类别:文库,文档格式:PPT,文档页数:19,文件大小:239.5KB,团购合买
5.4 简单算术表达式和赋值语句的翻译 5.5 布尔表达式的翻译
点击下载完整版文档(PPT)

5.4简单算术表达式和 赋值语句的翻译 ·约定 1.E中仅含简单变量; 2.全部变量同类型 3.翻译时不做语义检查 辅助安义 1.int NewTemp(void)产生临时变量的函数,每次调用 都定义一个新的临时变量。返回值为该变量的编号。 2.X.PLACE文法符号X的属性,其值为整型(◇0表示在符 号表中序号,〈0表示临时变量编号) 3. int GEN(int Op,int Arg1,int Arg2,int Result) 据所给实参产生士个四元式:(Op,Arg1 Arg2,Rs, 宜送入四元式表中,返同值为该西元武的序号。Arg1或 A「g2为零时表示该参数缺省

5.4 简单算术表达式和 赋值语句的翻译 • 约定 1. E中仅含简单变量; 2. 全部变量同类型; 3. 翻译时不做语义检查. • 辅助定义 1. int NewTemp(void) 产生临时变量的函数,每次调用 都定义一个新的临时变量。返回值为该变量的编号。 2. X.PLACE 文法符号X的属性,其值为整型(>0表示在符 号表中序号,<0表示临时变量编号) 3. int GEN(int Op,int Arg1,int Arg2,int Result) 根 据所给实参产生一个四元式:(Op,Arg1,Arg2,Result), 且送入四元式表中,返回值为该四元式的序号。Arg1或 Arg2为零时表示该参数缺省

赋值语的S-属性潮泽女法 1.Statement-AssignSt { 2.AssignSt-Varable:Expr GEN(:=,$4.PLACE,0,$1.PLACE) 3.Expr→Expr+Expr $.PLACE=NewTemp(); GEN(+,$1.PLACE,$3.PLACE,$$.PLACE);} 4.|Expr Expr {.PLACE=NewTemp(); GEN(*,$1.PLACE,$3.PLACE,$.PLACE);} 5.Expr )$$.PLACE=$2.PLACE;} 6.|identifier {$.PLACE=Entry($1);} 7.Varable-identifier {$$.PLACE=Entry($1);}

赋值语句的S-属性翻译文法 1.Statement→AssignSt {} 2.AssignSt→Varable : = Expr {GEN(:=,$4.PLACE, 0 , $1.PLACE);} 3.Expr→Expr + Expr {$$.PLACE=NewTemp(); GEN(+,$1.PLACE,$3.PLACE,$$.PLACE);} 4. | Expr * Expr {$$.PLACE=NewTemp(); GEN(*, $1.PLACE,$3.PLACE,$$.PLACE);} 5. | ( Expr ) {$$.PLACE=$2.PLACE;} 6. | identifier {$$.PLACE=Entry($1);} 7.Varable→ identifier {$$.PLACE=Entry($1);}

语义属性的表示 前面的语义动作中,Entry)的含义见5.3.2节。 终结符identifier具有的属性为该变量的词文(标识符),由词法 分析程序的yytext:给出。 $$,$1,$2.…的含义同5.2节。 由于每个非终结符的属性可能不止一个,在C语言中往往用 一个结构来描述它的全部属性。比如,Expr和Variable 的属性至少有两个,故可定义 struct Attr_Of_Expr_Var{ int PLACE;/用于表示符号表中的序号或临时变量的编号 char Type;/表示该表达式的类型

语义属性的表示 前面的语义动作中,Entry()的含义见5.3.2节。 终结符identifier具有的属性为该变量的词文(标识符),由词法 分析程序的yytext给出。 $$,$1,$2.…的含义同5.2节。 由于每个非终结符的属性可能不止一个,在C语言中往往用 一个结构来描述它的全部属性。比如,Expr和Variable 的属性至少有两个,故可定义 struct Attr_Of_Expr_Var{ int PLACE;//用于表示符号表中的序号或临时变量的编号 char Type;//表示该表达式的类型 }

优先关系和结合规则 ·不难看出,前面所给文法是二义性的,且不能刻画各运算 符的优先关系和结合规则。 ·如果我们能按某种规定(参阅5.10节),赋予各运算符优 先顺序和结合规则,那么就能对它所产生的句子进行有效 的语法分析和翻译。 ·从所给属性支法的语义动作可以看出,Expr代表了一个变 量(产生式6)或一个子表达式(产生式5)的运算(四元式)序 列,该序列的运算结果存放于一个临时变量中,这个变量 的编号将作为Expr的PLACE属性被传递给了Expr

优先关系和结合规则 • 不难看出,前面所给文法是二义性的,且不能刻画各运算 符的优先关系和结合规则。 • 如果我们能按某种规定(参阅5.10 节),赋予各运算符优 先顺序和结合规则,那么就能对它所产生的句子进行有效 的语法分析和翻译。 • 从所给属性文法的语义动作可以看出,Expr代表了一个变 量(产生式6)或一个子表达式(产生式5)的运算(四元式)序 列,该序列的运算结果存放于一个临时变量中,这个变量 的编号将作为Expr的PLACE属性被传递给了Expr

表达式中的类型匹配问题 。 在上面的讨论中,我们未考虑表达式运算中的类型 冲突问题。 。 许多语言允许混合运算,不过在运算前应先进行类 型转换,使运算对象具有相同的类型。 ● 因此,我们还应定义类型转换算符,以便产生对运 算对象进行转换的四元式。例如,若我们仅考虑整 型到实型的转换,则可定义运算符t,相应的四 元式(tr,A,O,T)的作用是把整型变量A转换为等值 的实型量T。 。 另外,为阅读上的直观性,在书写语义子程序时, 我们用+r,*r表示实型运算符,用+i,*表示整型 运算符

表达式中的类型匹配问题 • 在上面的讨论中,我们未考虑表达式运算中的类型 冲突问题。 • 许多语言允许混合运算,不过在运算前应先进行类 型转换,使运算对象具有相同的类型。 • 因此,我们还应定义类型转换算符,以便产生对运 算对象进行转换的四元式。例如,若我们仅考虑整 型到实型的转换,则可定义运算符itr,相应的四 元式(itr,A,0,T)的作用是把整型变量A转换为等值 的实型量T。 • 另外,为阅读上的直观性,在书写语义子程序时, 我们用+ r ,* r表示实型运算符,用+ i ,* i表示整型 运算符

EXpr→EXDr+EXpr的语义动作 int U=NewTemp(); int T=NewTemp(); GEN(itr,$1.PLACE,O,U); if($1.Type==i&&$3.Type==i) GEN(+,U,$3.PLACE,T); GEN(+$1.PLACE,$3.PLACE $$.Type=ri ,T) }else/*($1.Type==r&& $$.Type=i; $3.Type==i)*/ int U=NewTemp(); Helse GEN(itr,$3.PLACE,O,U); if($1.Type==r &$3.Type==r) GEN(+,$1.PLACE,U,T); [GEN(+,$1.PLACE,$3.PLACE $$.Type=ri ,D; $$.Type=r; $.PLACE=T; else if($1.Type==i) /*$3.Type==r*/

Expr→Expr+Expr的语义动作 { int T=NewTemp(); if($1.Type==i && $3.Type==i) {GEN(+i ,$1.PLACE,$3.PLACE ,T); $$.Type=i; }else if($1.Type==r && $3.Type==r) {GEN(+r ,$1.PLACE,$3.PLACE ,T); $$.Type=r; } else if($1.Type==i) /* $3.Type==r*/ { int U=NewTemp(); GEN(itr,$1.PLACE,0,U); GEN(+r ,U,$3.PLACE,T); $$.Type= r ; }else/*($1.Type==r&& $3.Type==i) */ { int U=NewTemp(); GEN(itr,$3.PLACE,0,U); GEN(+r ,$1.PLACE,U,T); $$.Type=r; } $$.PLACE=T; }

5.5布尔表达式的期禄 布尔表达式是布尔运算量和逻辑运算符按一定语法规 则组成的式子。 逻辑运算符通常有人、V、一三种(在某些语言中, 还有≡(等价)及→,(蕴含)等等); ·逻辑运算对象可以是逻辑值(True或False)、布 尔变量、关系表达式以及由括号括起来的布尔表达式。 。 不论是布尔变量还是布尔表达式,都只能取逻辑值 True或False。在计算机内通常用1(或非零整数) 表示真值(True),用O表示假值(False)。 ·关系表达式是形如E1RopE2的式子,其中E和E2为 简单算术表达式,Rop为关系运算符(,=,=,<>)。若E和E2之值使该关系式成立,则此关 系表达式之值为True,否则为False

5.5 布尔表达式的翻译 • 布尔表达式是布尔运算量和逻辑运算符按一定语法规 则组成的式子。 • 逻辑运算符通常有∧、∨、﹃三种(在某些语言中, 还有≡(等价)及→(蕴含)等等); • 逻辑运算对象可以是逻辑值(True 或 False)、布 尔变量、关系表达式以及由括号括起来的布尔表达式。 • 不论是布尔变量还是布尔表达式,都只能取逻辑值 True或False。在计算机内通常用1(或非零整数) 表示真值(True),用0表示假值(False)。 • 关系表达式是形如E1 Rop E2的式子,其中E1和E2为 简单算术表达式,Rop为关系运算符(, =, =, <>)。若E1和E2之值使该关系式成立,则此关 系表达式之值为True,否则为False

布尔表达式的语义及作用 ·布尔表达式的语义在于指明计算一个逻辑值的规则· 布尔表达式在程序设计语言中有两个基本的作用:一是在 某些控制语句中作为实现控制转移的条件;另一个则是用 于计算逻辑值本身。 ·约定:各类运算符的优先顺序(由高至低)如下: 1.括号 2.算术运算符 *、/ 十、 3.关系运算符 〈、《=、=、>、>=、)〉 4.逻辑运算符 Λ V

布尔表达式的语义及作用 • 布尔表达式的语义在于指明计算一个逻辑值的规则 . • 布尔表达式在程序设计语言中有两个基本的作用:一是在 某些控制语句中作为实现控制转移的条件;另一个则是用 于计算逻辑值本身。 • 约定:各类运算符的优先顺序(由高至低)如下: ⒈括号 ⒉算术运算符 *、/ +、- ⒊关系运算符 、>=、<> ⒋逻辑运算符 ┒ ∧ ∨

布尔表达式的等价解释 为了方便起见,下面我们仅讨论由文法 E-EEEVEhE(E)ii Ropi (5.1) 对于布尔表达式的计值和翻译,可采用类似算术表达式的方式来进 行。例如,对于布尔表达式AVBAC,可翻译为: (∧, B, C, T1) (V, A, 1, 2) 但是,对于一个布尔表达式而言,我们的目的仅仅是为了判定它的 真假值。因此,有时只需计算它的一个子表达式,、便能确定整 个布尔表达式的真假值。例如,对于AVB,只要知道A为真,厕 无论B取何值,表达式的结果一定为真。 可见,对于三种常见逻辑运算,可作如下等价的解释: A∧B口 (A)?B:0 (5.2) AVB 口 (A)?1:B (5.3) A (A)?0:1 (5.4)

布尔表达式的等价解释 为了方便起见,下面我们仅讨论由文法 E→E∧E|E∨E|┑E|(E)| i | i Rop i (5.1) 对于布尔表达式的计值和翻译,可采用类似算术表达式的方式来进 行。例如,对于布尔表达式A∨B∧C,可翻译为: (∧, B, C, T1 ) (∨, A, T1, T2 ) 但是,对于一个布尔表达式而言,我们的目的仅仅是为了判定它的 真假值。因此,有时只需计算它的一个子表达式,便能确定整 个布尔表达式的真假值。例如,对于A∨B,只要知道A为真,则 无论B取何值,表达式的结果一定为真。 可见,对于三种常见逻辑运算,可作如下等价的解释: A∧B (A) ? B : 0 (5.2) A∨B (A) ? 1 : B (5.3) ﹃A (A) ? 0 : 1 (5.4)

布尔表达式的出口 对于布尔表达式AV(BA(CVD)),其等价的表述是 A?1:(B?((C?0:1)?1:D):0) 显然,采用此种结构可产生更为有效的中间代码。这里需假 定原布尔表达式的计算过程中不含有任何的副作用。 在上式的计算中,根据A、B、C、D的取值不同,计算的结 果以及运算的中止点亦不同。例如,当A=1(真)时,结 果为1且中止于左边第一个‘1'处。 这样中止的点我们称为该布尔表达式的出口,同时,把使布 尔表达式取值为真的出☐称为真出□,反之称为假出☐。 对一个布尔表达式而言,它至少有一个真出口和一个假出口 (当然可以有多个)。在用于控制流程的布尔表达式E的 计算中,这些出口分别指出当E值为真和假时,控制所应 转向的目标(即某一四元式的序号)

布尔表达式的出口 对于布尔表达式A∨(B∧(┑C∨D)),其等价的表述是 A ? 1 :(B ?((C ? 0 :1)? 1 : D ): 0 ) 显然,采用此种结构可产生更为有效的中间代码。这里需假 定原布尔表达式的计算过程中不含有任何的副作用。 在上式的计算中,根据A、B、C、D的取值不同,计算的结 果以及运算的中止点亦不同。例如,当A=1(真)时,结 果为1且中止于左边第一个‘1’处。 这样中止的点我们称为该布尔表达式的出口,同时,把使布 尔表达式取值为真的出口称为真出口,反之称为假出口。 对一个布尔表达式而言,它至少有一个真出口和一个假出口 (当然可以有多个)。在用于控制流程的布尔表达式E的 计算中,这些出口分别指出当E值为真和假时,控制所应 转向的目标(即某一四元式的序号)

点击下载完整版文档(PPT)VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
共19页,试读已结束,阅读完整版请下载
相关文档

关于我们|帮助中心|下载说明|相关软件|意见反馈|联系我们

Copyright © 2008-现在 cucdc.com 高等教育资讯网 版权所有