两个相同前缀规则的Antlr4语法歧义



所以我有以下SQL表达式编辑器的语法规则(简化):

FUNCTIONID: 'sum' | 'avg';
functionExpr: FUNCTIONID '(' expr ')'
AGGFUNCTIONID: 'sum' | 'avg'
aggFunctionExpr: AGGFUNCTIONID '(' expr ')' 'over' ...

该代码适用于诸如"sum(1)over…"之类的表达式,但不适用于没有over的情况。

我怎么能让这个语法同时适用于这两种情况,并且仍然有这两条规则?

'sum'和'avg'将始终标记为FUNCTIONID,这是没有办法的。有关解释,请参阅:语法分析器/lexer规则的Antlr v3错误

你可以这样做:

aggFunctionExpr
 : aggFunctionId '(' expr ')' 'over' ...
 ;
functionExpr
 : functionId '(' expr ')'
 ;
functionId    : SUM | AVG;
aggFunctionId : SUM | AVG;
SUM : 'sum';
AVG : 'avg';
...

相关内容

  • 没有找到相关文章

最新更新