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