布尔表达式的翻译-18页文档资料

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
并将此四元式的序号(即1)作为语义信息存起来,待开 始翻译S1时,再这将个S不1的完第全一的四四元元式式的。序号(即5)回填 另外,在翻译过程中,常常会出现若干转移四元式转 向同一目标,但此目标的具体位置又尚未确定的情况, 此时我们可将这些四元式用拉链的办法将它们链接起 来,用一指针指向链头,在确定了目标四元式的位置 之后,再回填这个链。
1)可采用类似算术表达式的方式来进行。例如,对于布尔 表达式A∨B∧C,可翻译为:
(∧,
B, C, T1 )
(∨,
A, T1, T2 )
3. 布尔表达式的等价解释-过程角度
但是,对于一个布尔表达式而言,我们的目的仅 仅是为了判定它的真假值。因此,有时只需计 算它的一个子表达式,便能确定整个布尔表达 式的真假值。例如,对于A∨B,只要知道A为 真,则无论B取何值,表达式的结果一定为真。
对一个布尔表达式而言,它至少有一个真出口和一个假出口 (当然可以有多个)。在用于控制流程的布尔表达式E的 计算中,这些出口分别指出当E值为真和假时,控制所应 转向的目标(即某一四元式的序号)。
5. 控制语句中的布尔表达式
if E then S1 else S2或while E do S
T F
E的代码
(1) (jnz, A, -, 5)
(2) (j, - ,- , 3)
(3) (j<, B, C, 5)
(4) (j, -, -, p+1)
(5)
S1相应的四元式序列
(p) (j, -, -, q)
(p+1) S2相应的四元式序列
(q) …
其中,表达式A的真出口为5(也是整个表达式的真出 口),假出口为3(即表达式B<C的第一四元式); B<C的真、假出口也分别是整个表达式的真、假出口。
关系表达式是形如E1 Rop E2的式子,其中E1 和E2为简单算术表达式,Rop为关系运算符 (<, >, =, <=, >=, <>)。若E1和E2之值 使该关系式成立,则此关系表达式之值为True, 否则为False。
2. 布尔表达式的语义及作用
布尔表达式的语义在于指明计算一个逻辑值的规则 . 布尔表达式在程序设计语言中有两个基本的作用:
可见,对于三种常见逻辑运算,可作如下等价的 解释:
A∧B (A) ? B : 0
(5.2)
A∨B (A) ? 1 : B
(5.3)
﹃A
(A) ? 0 : 1
(5.4)
4. 布尔表达式的出口
对于布尔表达式A∨(B∧(┑C∨D)),其等价的表述是 A ? 1 :(B ?((C ? 0 :1)? 1 : D ): 0 )
对于一个布尔表达式E来说,它应有两条链: 真出口链(称为T链,记作TC)和假出口链(称为 F链,记作FC)。它们就是非终结符Expr的两 个属性Expr.TC及Expr.FC。
例如,对于上述if语句中的布尔式E=A∨B<C, 在翻译过程中形成的T链和F链如右图所示。
其中,每条链都是利用四元式中的Result域连 接的, Result >0时,它给出本链的后继四元式 的序号, Result =0时表示本四元式是链尾结 点。
8. 拉链与回填
在自底向上的语法制导翻译时(或者说,在S-属性翻译 文法中), 在产生一个(无)条件转移四元式时, 它所要转 向的那个四元式有时尚未产生,故无法立即产生一个 完全的控制转移四元式。
例如的,中在间上代例码中尚,未在产产生生,第即一A的个真四出元口式确时切,位由置于语并句不S知1 道,故此时只能产生一个空缺转移目标的四元式 (jnz,A,-,0),
E的代码
S1的代码
T
S的代码 F
S2的代码
(a) if语句
(b) while语句
6. 布尔表达式真假值的确定
一个布尔表达式E的真假值的确定,是在语法翻译过程 中,根据(5.2)-(5.4)等价解释式逐步进行的。
例如,对于布尔表达式
E = E(1) ∨E(2)
若E(1)为真,则E必为真,故E(1)的真出口必是E的真出 口(之一);
在设计布尔表达式翻译算法(即编写语义动作) 时,可定义和使用如下三类四元式:
(jnz, A1, ,p) 当A1为真(非零)时,转向第p四元 式;
(jrop,A1,A2,p)当关系A1 rop A2 成立时,转向 第p四元式;
(j, , ,p) 无条件转向第p四元式
例如,对于条件语句
if A∨B<C then S1 else S2 经翻译后,可得四元式序列:
一是在某些控制语句中作为实现控制转移的条件; 另一个则是用于计算逻辑值本身。 约定:各类运算符的优先顺序(由高至低)如下:
⒈括号 ⒉算术运算符 *、/
+、⒊关系运算符 <、<=、=、>、>=、<> ⒋逻辑运算符 ┒
∧ ∨
3. 布尔表达式的等价解释-求值角度
为了方便起见,下面我们仅讨论由文法
E→ E∧E | E∨E | ┑E | (E) | I | i Rop i (5.1)
若E(1)ቤተ መጻሕፍቲ ባይዱ假,则E的真假值取决于E(2)的真假值,此时, 需对E(2)进行计算,由此可见,E(1)的假出口应为E(2) 对应的四元式的序号(E(2)的入口),同时,E(2)的真、 假出口也是E的真、假出口。
类似地,可确定E(1) ∧ E(2) 、﹃E及更复杂的表达式的 真、假出口。
7. 条件语句的翻译结果
1. 概述
布尔表达式是布尔运算量和逻辑运算符按一定 语法规则组成的式子。
逻辑运算符通常有∧、∨、﹃三种(在某些语 言中,还有≡(等价)及→(蕴含)等等);
逻 辑 运 算 对 象 可 以 是 逻 辑 值 ( True 或 False)、布尔变量、关系表达式以及由括号 括起来的布尔表达式。
不论是布尔变量还是布尔表达式,都只能取逻 辑值True或False。在计算机内通常用1(或 非零整数)表示真值(True),用0表示假值 (False)。
显然,采用此种结构可产生更为有效的中间代码。这里需假 定原布尔表达式的计算过程中不含有任何的副作用。
在上式的计算中,根据A、B、C、D的取值不同,计算的结 果以及运算的终止点亦不同。例如,当A=1(真)时,结 果为1且终止于左边第一个‘1’处。
这样终止的点我们称为该布尔表达式的出口,同时,把使布 尔表达式取值为真的出口称为真出口,反之称为假出口。
相关文档
最新文档