用bison实现tiger语言的语法分析,只判断语法是否出错,无语义动作。
shift/reduce conflict:
按照书上给的语法规则完成tiger.y文件,出现了三类shift/reduce conflict
一、else悬挂
exp : IF exp THEN exp .
| IF exp THEN exp . ELSE exp
可以通过给else赋比then高的优先级消除,但要注意不要比运算符号等级高。
二、:=、. 、 of
exp: exp . PLUS exp
| exp . MINUS exp
....
| lvalue ASSIGN exp .
PLUS shift, and go to state 38
MINUS shift, and go to state 39
....
PLUS [reduce using rule 42 (exp)]
MINUS [reduce using rule 42 (exp)]
当遇到+、-之类的运算符时,分析器不知道该移进还是该归约。
. 、of情况类似
可以给:= . of赋比运算符低的优先级消除冲突
三、id[exp]
exp: ID . LBRACK exp RBRACK OF