个性化阅读
专注于IT技术分析

布尔表达式

布尔表达式有两个主要目的。它们用于计算逻辑值。它们还用作使用if-then-else或while-do的条件表达式。

考虑语法

E  →  E OR E
E  →  E AND E
E  →  NOT E 
E  →  (E)
E →  id relop id
E  →  TRUE
E  →  FALSE

该relop用<, >, <, >表示。

AND和OR保持关联。与AND和最后OR相比, NOT的优先级更高。

生产规则 语义动作
E→E1或E2 {E.place = newtemp();发射(E.place’:=’E1.place’OR’E2.place)}
E→E1 + E2 {E.place = newtemp();发射(E.place’:=’E1.place’AND’E2.place)}
E→不是E1 {E.place = newtemp();发射(E.place’:=”NOT’E1.place)}
E→(E1) {E.place = E1.place}
E→id relop id2 {E.place = newtemp();发射(’if’id1.place relop.op id2.place’goto’nextstar + 3); EMIT(E.place’:=”0’)EMIT(’goto’nextstat + 2)EMIT(E.place’:=”1’)}
E→真 {E.place:= newtemp();发射(E.place’:=”1’)}
E→假 {E.place:= newtemp();发射(E.place’:=”0’)}

EMIT函数用于生成三个地址代码, 而newtemp()函数用于生成临时变量。

E→id relop id2包含next_state, 并给出输出序列中下三个地址语句的索引。

这是使用上述转换方案生成三个地址代码的示例:

p>q AND r<s OR u>r
     100: if p>q goto 103
     101: t1:=0
     102: goto 104
     103: t1:=1
     104: if r>s goto 107
     105: t2:=0
     106: goto 108
     107: t2:=1
     108: if u>v goto 111
     109: t3:=0
     110: goto 112
     111: t3:= 1
     112: t4:= t1 AND t2
     113: t5:= t4 OR t3
赞(0)
未经允许不得转载:srcmini » 布尔表达式

评论 抢沙发

评论前必须登录!