【发布时间】:2017-11-15 19:45:04
【问题描述】:
我有以下作品:
expression
: primary # stubLabel
| expression '.' Identifier # stubLabel
| expression '.' 'this' # stubLabel
| expression '.' 'new' nonWildcardTypeArguments? innerCreator # stubLabel
| expression '.' 'super' superSuffix # stubLabel
| expression '.' explicitGenericInvocation # stubLabel
| expression '[' expression ']' # stubLabel
| Identifier arguments # namedMethodInvocation
| expression '.' Identifier arguments # namedMethodInvocation
| expression arguments # unnamedMethodInvocation
| // Lots of other patterns...
;
我希望让解析器在尝试unnamedMethodInvocation 之前先尝试namedMethodInvocation 模式。这不会自动发生,因为 ANTLR 会尝试选择具有最长匹配的替代方案,而不是使用第一个匹配策略。我怎样才能强制它这样做?
编辑:对不起,我忽略了上面的语法文件的链接。 Here 是。
【问题讨论】:
-
请发布
primary生产规则。 -
在解析器规则中,alts 被一个一个地测试,从上到下的顺序(如语法中所写),第一个匹配的获胜。 Alts 排序本身就是一个问题,因为它决定了很多事情(例如优先级)。
标签: java parsing antlr grammar antlr4