我正在尝试使用Antlr4为sql select语句创建解析器,其中包含以下部分
expr: '1' | expr('*'|'/'|'+'|'-'|'||') expr; // As the re-factored form of expression: compound expression;
WS :[ \t\r\n]+ -> skip ;
我认为这条规则允许以下几组结果:
1
1+1
1+1-1
....
但是在图表中显示它无法解析
有没有人知道为什么它不能像我预期的那样被解析?
答案 0 :(得分:0)
这个稍微调整过的语法对我有用。在输入1+1-1||1*1-1/1
上测试。在ANTLRWorks2.1中测试
grammar myGrammar;
top : expr EOF ;
expr : '1'
| expr '+' expr
| expr '*' expr
| expr '/' expr
| expr '+' expr
| expr '-' expr
| expr '||' expr
;
WS :[ \t\r\n]+ -> skip ;
One : '1' ;
Times : '*' ;
Div : '/' ;
Plus : '+' ;
Minus : '-' ;
Or : '||' ;
修改强>
当匹配规则top
:
grammar newEmptyCombinedGrammar;
top : expr EOF ;
expr: one
| expr op=(Times|Div|Plus|Minus|Or) expr
;
one : One ;
One : '1' ;
Times : '*' ;
Div : '/' ;
Plus : '+' ;
Minus : '-' ;
Or : '||' ;
WS :[ \t\r\n]+ -> skip ;