微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决跨多个解析器规则的 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 举报,一经查实,本站将立刻删除。