所以我SQL表达式编辑器下面的语法规则(简体)Antlr4语法歧义:两个相同的前缀规则
FUNCTIONID: 'sum' | 'avg';
functionExpr: FUNCTIONID '(' expr ')'
AGGFUNCTIONID: 'sum' | 'avg'
aggFunctionExpr: AGGFUNCTIONID '(' expr ')' 'over' ...
的代码适用于诸如“总和(1)在... “但没有时没有over
。
我怎么能让这个语法适用于这两种情况,仍然有这两个规则?
ANTLR4的词法分析器工作在许多方面一样ANTLR3,这是在这里解释:http://stackoverflow.com/questions/9251048/antlr-v3-error-with-parser-lexer-rules – 2014-10-31 07:47:27
问题在于他们评论了第一条规则获胜,这正是现在正在发生的事情。我希望解析器做的是预测一个'over'令牌,并根据是否有一个令牌来决定。那可能吗? – escanda 2014-10-31 08:27:20
不,这就是我的意思:ANTLR4和ANTLR3在这方面的工作原理是一样的。我会在一个答案中进一步解释。 – 2014-10-31 08:39:39