1

我正在尝试使用 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
....

但是在图中它显示它无法解析

有谁知道为什么它不能像我预期的那样被解析?

4

1 回答 1

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 ; 

在此处输入图像描述

于 2014-02-28T13:52:43.000 回答