跨多个解析器规则的 ANLTR 优先级

问题描述

考虑以下语法

grammar precedence;

s: expr EOF;
expr: '!' expr | expr '.' ID | ID;

ID: [a-zA-Z];
WS: [ \n] -> skip;

给定此文法的优先规则,表达式 !a.b生成以下解析树

Parse tree with (!a) being accessed

为了组织我的语法,我把它改成了

grammar precedence;

s: expr EOF;
expr: not | expr '.' ID | ID;
not: '!' expr;

ID: [a-zA-Z];
WS: [ \n] -> skip;

运行时,我们得到如下解析树

Parse three where a.b has the ! applied to it

ANLTR 参考说明

ANTLR 解决了歧义,有利于首先给出的替代方案,隐含地允许我们指定运算符优先级。

然而,not 选项的位置没有改变,但被赋予了不同的优先级。为什么?有这样的间接层时,是否有不同的规则?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)