6第六章 语义分析3.pdfVIP

  • 2
  • 0
  • 约1.06万字
  • 约 44页
  • 2018-10-19 发布于山东
  • 举报
4.逻辑表达式的翻译 C语言中,逻辑表达式可出现在 (1)逻辑计算表达式,如x=(ab) (cd) (2 )条件,如if ((ab) (cd)) x=0; else x=1; 逻辑表达式的作用有两个:(1)用作控制语句中的条件 式;(2 )用作逻辑赋值句中的逻辑计算表达式。 翻译方法及过程 分析逻辑表达式的书写格式 (ab) (cd) || !(a==c) 运算符号有:逻辑运算符和关系运算符 逻辑运算符 ! || 逻辑运算符的优先级从高到低为! || ;和||都服从 左结合。 关系运算符号rop (有、=、=、=、等) 形如E1 rop E2,其中E1和E2是算术表达式, 各关系运算符的优先级都相同,并且高于所有逻辑运算 符,低于任何算术运算符。 根据运算符号的优先级,逻辑表达式的文法规则 可表示为: 1.BE-BE || BT 2.BE-BT 3.BT-BT BF 4.BT-BF 5.BF-!BF 6.BF- (BE) 7.BF-E rop E (E为表达式) 8.BF-i rop i 9.BF-i (1)用作逻辑计算运算表达式的翻译 采用类似于算数表达式的语义动作定义方法 如(12) (34 )|| (53 ) 每条文法的语义动作定义如下: 1)BE’→BE {BE’.val=BE.val} 2 )BE(1)→BE(2)||BT {BE(1).val=BE(2).val||BT.val} 3 )BE(1)→BT {BE(1).val=BT.val} 4 )BT(1)→BT(2)BF {BT(1).val=BT(2).valBF.val} 5)BT(1)→BF {BT(1).val=BF.val} 6 )BF→!BF {BF.val=!BF.val} 7 )BF→(BE) {BF.val=BE.val} (2 )用作控制语句中条件表达式的翻译 其作用是用来选择下一个执行点 例1:if ((ab)(cd)) x=0; else x=1; 如果ab的条件成立,继续执行cd;如果cd成立才执 x=0 ,否则执行x=1 。如果ab的条件不成立,则转到执行 x=1 。 例2:while ((ab)||(cd)) x=1; 如果ab的条件成立,则转到执行循环体x=1 ;否则继续 执行cd;如果cd成立则转到执行循环体x=1 ,否则转 到执行循环语句的下一个语句。 翻译方法及过程 出现在控制语句中条件表达式要根据逻辑运算符 号进行分拆。 每一个关系比较表达式都有条件成立和条件不成 立的转向。 翻译方法:每个关系比较表达式都翻译出两个转 向指令,一个成立时转向——真出口(TC ),一 个不成立时转向——假出口(FC)。、 对于以下规则 7.BF-E rop E 8.BF-i rop i 9.BF-i 都产生两条指令 翻译方法 例if (ab )x=0; else x=1 ; (ab)翻译为 (1) (j, a , b , ? ) (2) (j ,,,?) 8.BF-i1 rop i2 语义动作: (1) (jrop, i1 , i2 , ? )真出口 (2) (j ,,,?)假出口 例if (c )x=0; else x=1 ; (c)翻译为 (1) (jnz, c , , ? ) (2) (j ,,,?) 9.BF-i 语义动作: (1) (jnz, i , , ? )真出口 (2) (j ,,,?)假出口 例if (e+fg+h )x=0; else x=1 ; (e+fg+h)翻译为 (1) (+, e , f , t1 ) (2) (+

文档评论(0)

1亿VIP精品文档

相关文档