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计数器)?
调试解析器以查看发生了什么。行信息通常来自导致分析错误的标记。这是你期望的标志吗?它是否有正确的线路信息? –