所以我对SQL表达式编辑器(简化)有以下语法规则:
FUNCTIONID: 'sum' | 'avg';
functionExpr: FUNCTIONID '(' expr ')'
AGGFUNCTIONID: 'sum' | 'avg'
aggFunctionExpr: AGGFUNCTIONID '(' expr ')' 'over' ...
该代码适用于诸如“sum(1)over ...”之类的表达式,但不适用于没有over
的情况。
我怎样才能使这个语法适用于这两种情况并仍然有这两个规则?
答案 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';
...