我现在知道如何让ELSE与最近的IF
:
%nonassoc IFX
%nonassoc ELSE
| IF stmt %prec IFX
| IF stmt ELSE stmt
但是如何让ELSE
与最远的IF
相关联?
我尝试切换上面两个%nonassoc
的顺序,但之后如果似乎无法识别IF stmt ELSE stmt
格式的任何有效语句。
为什么?
如何正确地做到这一点?
答案 0 :(得分:1)
(未经测试)如果多个if
之间存在歧义,您需要强制bison生成一个解析器,以减少if
语句。根据{{3}},如果IF stmt
规则的优先级高于ELSE
令牌,则可以实现此目的。所以
%nonassoc ELSE
%nonassoc IFX
| IF stmt %prec IFX
| IF stmt ELSE stmt
应该这样做。