2012-07-25 83 views
1

我最近開始研究ANTLR。以下是算術表達式的語法。 問題是,當我將(調用)表達式規則放入term規則中時,即使對於(9 + 8),它也是錯誤地解析。它以某種方式忽略了正確的括號。不正確解析ANTLR中的簡單算法語法

雖然當我把add規則,而不是從規則條款調用表達式規則,它工作正常。

如:

term: 
INTEGER 
| '(' add ')' 
; 

誰能告訴我,爲什麼它正在發生,因爲更多或LES它們兩者是相同的。

格拉默,這就是它給不正確的結果

term 
    : 
    INTEGER 
    | '(' expression ')' 
    ; 

mult 
    : 
    term ('*' term)* 
    ; 

add 
    : 
    mult ('+' mult)* 
    ; 

expression 
    : 
    add 
    ; 

回答

2

當我解析"(8+9)"從你的語法生成的解析器,先從expression規則,我碰到下面的分析樹:

enter image description here

換句話說:它工作得很好。

也許您正在使用ANTLRWorks'(或ANTLR IDE)解釋器來測試您的語法?在這種情況下:不要使用解釋器,它是越野車。改爲使用ANTLRWorks的調試器(該圖像從ANTLRWorks的調試器中導出)。

+0

感謝Bart現在我終於可以繼續前進了:D和FYI我使用eclipse IDE和antlr。 – Dude 2012-07-25 18:47:35

+0

不客氣@ user1529267。 – 2012-07-25 18:52:56

+0

巴特的答案是完美的。注意ANTLRworks 2 ...在開發中,似乎是一個完整的重寫,所以希望我們未來會看到更好的結果。 – Carlos 2012-07-26 04:06:11