2014-02-28 78 views
1

我試圖讓使用Antlr4的SQL SELECT語句語法分析器,其中包含以下部分的IntelliJ Antlr4插件左直接遞歸不起作用

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

這個略有調整的語法適用於我。測試輸入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 : '||' ; 

enter image description here

編輯

我能得到這個工作,也符合規則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 ; 

enter image description here

+0

它是一個錯誤,或者實際上它是如何工作的? – user3363807

+0

@ user3363807請看我更新的答案。我能夠讓你的場景發揮作用。 – MrCodeMnky