2013-07-25 37 views
0

在這裏看不到我的錯誤。給定一個簡單的迴文語法:4.1解析器聲稱「不匹配的輸入」與簡單的迴文語法

// test1.g 

grammar test1; 

start 
    : 'a' start 'a' 
    | 'b' start 'b' 
    | 'a' 
    | 'b' 
    | 
    ; 

WS : [ \t\r\n]+ -> skip ; 

給出的輸入aabbbaa,生成的解析器報告時:

line 1:5 mismatched input 'a' expecting 'b' 

但它看起來像合法輸入給我。 Antlr v4.1。

+0

你可以在你構建'test1Parser'的實例並使用它調用'start'方法的地方包含代碼嗎? –

+0

以上是我寫的唯一代碼,其他都是我想的。我正在使用TestRig,如本書第1.2節所示。但我可能會感到困惑,而不是Java程序員。 –

回答

1

這裏的問題是,你並沒有包括像下面這樣的規則:

entry : start EOF; 

通過省略EOF,你已經打了一個bug #118可以在某些堆棧敏感解析的情況下表現(決定是LL ,而不是SLL)。解決這個問題的性能影響是巨大的(不能被低估),所以直到我們找到解決問題的另一種方式時,您需要了解這一點,並確保使用以明確的EOF符號結尾的規則開始解析。

+0

我確信這在某種意義上是一個正確的答案,所以我會針對我在應用修補程序時得到的完全不同的錯誤行爲發佈一個單獨的問題。 –