0
時,我有下面的C函數來捕獲由ANTLR拋出識別錯誤:ANTLR:得到錯誤行號解析多行文本
void recognition(pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_UINT8 *list)
{
pANTLR3_PARSER parser;
pANTLR3_EXCEPTION exception;
parser = (pANTLR3_PARSER) (recognizer->super);
exception = recognizer->state->exception;
printf("%d\n", exception->line); // ALWAYS PRINTS 1 (WHICH IS WRONG)
}
如果一個解析(帶ANTLR)多行文本在第一行有一個錯字,recognition
函數將打印「1」(這是正確的)。但是,如果錯字發生在第一行後(即> = 2),則recognition
函數始終打印「1」(這是錯誤的)。
問題是:如何在打印解析錯誤的地方打印正確的行號(建議:每次解析新行標記時,是否必須更新語法以增加特定的ANTLR計數器)?
調試解析器以查看發生了什麼。行信息通常來自導致分析錯誤的標記。這是你期望的標誌嗎?它是否有正確的線路信息? –