Antlr4语法模糊两个相同的前缀规则

时间:2014-10-31 06:48:15

标签: antlr4

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

FUNCTIONID: 'sum' | 'avg';
functionExpr: FUNCTIONID '(' expr ')'

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

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

我怎样才能使这个语法适用于这两种情况并仍然有这两个规则?

1 个答案:

答案 0 :(得分:0)

'sum'和'avg'将始终标记为FUNCTIONID,无法绕过它。有关说明,请参阅:Antlr v3 error with parser/lexer rules

您可以这样做:

aggFunctionExpr
 : aggFunctionId '(' expr ')' 'over' ...
 ;

functionExpr
 : functionId '(' expr ')'
 ;

functionId    : SUM | AVG;
aggFunctionId : SUM | AVG;

SUM : 'sum';
AVG : 'avg';

...