布尔表达式

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

E→E OR EE→E AND EE→NOT E E→(E)E →id relop idE→TRUEE→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> r100: if p> q goto 103101: t1:=0102: goto 104103: t1:=1104: if r> s goto 107105: t2:=0106: goto 108107: t2:=1108: if u> v goto 111109: t3:=0110: goto 112111: t3:= 1112: t4:= t1 AND t2113: t5:= t4 OR t3

    推荐阅读