【发布时间】:2019-11-13 14:38:15
【问题描述】:
以下测试语法的不同之处仅在于规则“expr”的第一个替代项是内联指定的,或者引用了具有相同定义的另一个规则“notExpression”。但是这种语法会产生不同的树来解析:'! a&b'。为什么?
我真的希望语法产生第一个结果(不与标识符关联,不与 AND 表达式关联),但在我的真实语法中仍然需要有 'expr' 来引用 'notExpression'。我需要改变什么?
grammar test;
s: expr ';' <EOF>;
expr:
NOT expr
| left=expr AND right=expr
| identifier
;
identifier: LETTER (LETTER)*;
WS : ' '+ ->skip;
NOT: '!';
AND: '&';
LETTER: 'A'..'z';
grammar test;
s: expr ';' <EOF>;
expr:
notExpression
| left=expr AND right=expr
| identifier
;
notExpression: NOT expr;
identifier: LETTER (LETTER)*;
WS : ' '+ ->skip;
NOT: '!';
AND: '&';
LETTER: 'A'..'z';
【问题讨论】:
标签: antlr4 operator-precedence