我正在使用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;当它是第3行时,返回5.似乎总有一些偏移。
这是ANTLR3c中的错误还是我的使用LT()错了?我假设LT(0)返回令牌“Include”,并从中得到行号。
谢谢!
答案 0 :(得分:1)
此处描述了解决方法。根本原因是输入初始化错误。
或者您可以调整此c ++目标patch
答案 1 :(得分:0)
第一行只有一个错误(根据我所知,只有C目标)。初始值可能未正确设置。我通常在文本前加上用空格char解析(因为通常忽略空格)。如果空间对您很重要,请选择其他字符。使用该前缀,第一个标记(带前缀的字符)的行号是错误的,但其他所有标记都是正确的。
请记住:行号是从一开始的(而字符偏移是从零开始的)。