实验内容
输入为一个布尔表达式,以换行结束。输出为这个布尔表达式的真值(true或false)。
尝试二义文法和非二义文法两种不同的实现方式。布尔表达式二义文法为:S –> S or S | S and S | not S | (S) | true | false,其中优先级or < and < not,or 和 and 左结合,not 右结合。
非二义文法请参照表达式非二义文法自己写出来。
实验过程
cal.l
1 | %{ |
二义文法
二义文法
1 | S –> S or S | S and S | not S | (S) | true | false |
优先级
1 | %token NUM LPAREN RPAREN ENTER PLUS MINUS TIMES DIVIDE AND OR NOT TRUE FALSE |
cal.y
1 | %{ |
非二义文法
非二义文法
1 | E -> E OR T | T |
cal.y
1 | %{ |
makefile
1 | cal3: cal.tab.o lex.yy.o |