2013-06-30 36 views
0

我使用ANTLR3C V3.4,這裏是語法的一個片段:Ç目標 - 行號不正確

include_cmd 
    : Include Double_Quote file_name Double_Quote 
    { 
     my_model->add_include($file_name.text, LT(0)->getLine(LT(0))); 
    } 
    ; 

但我發現,LT(0) - >函數getline(LT(0))返回一個不正確的行號,當它是第一行時,LT()返回3;當它是第三行時,返回5.看起來總是有一些偏移量。

這是ANTLR3c中的錯誤還是我使用LT()錯誤?我假設LT(0)返回標記「包含」,並從中得到行號。

謝謝!

+0

有第一和第三線之間什麼?是否有可能得到下一條語句開頭的行號,因爲antlr在符合解析規則之前轉到下一個標記? – Slartibartfast

+0

其實我遇到的問題是行號,而不是字符位置。我發現在將LT(0) - > getLine(LT(0))更改爲LT(0) - >行之後,它很好。我不確定這是否是最佳解決方案,但感謝所有答覆。 –

回答

0

第一行只有一個錯誤(並且只有C目標,據我所知)。初始值可能沒有正確設置。我通常在文本前加空格字符來解析(因爲空白字符通常被忽略)。如果空間對你很重要,選擇一個不同的字符。使用該前綴,第一個標記的行號(前綴字符)是錯誤的,但其他所有標記都是正確的。

請注意:行號是基於一行的(而字符偏移量是從零開始的)。

1
+0

這個簡單的修復程序仍然沒有進入官方源代碼,真是太神奇了。 Github上也有3個針對運行時錯誤的pull請求(來自我的2個):https://github.com/antlr/antlr3/pulls。然而,那些從未成功的人也可能永遠不會。 –