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;当它是第 3 行时,返回 5。似乎总是有一些偏移量。

这是 ANTLR3c 中的错误还是我使用 LT() 是错误的?我假设 LT(0) 返回令牌“包含”并从中获得行号。

谢谢!

4

2 回答 2

1

此处描述了解决方法。根本原因是输入的错误初始化。

http://antlr.markmail.org/search/?q=Jim%20Idle#query:Jim%20Idle%20from%20list%3Aorg.antlr.antlr-interest%20from%3A%22Jim%20Idle%22+page:83 +mid:rnvmkdec65rddzua+状态:结果

或者你可以调整这个 c++ 目标补丁

于 2013-07-01T06:26:10.477 回答
0

第一行只有一个错误(据我所知,只有 C 目标)。初始值可能未正确设置。我通常在要解析的文本前加上空格字符(因为通常会忽略空格)。如果空间对您很重要,请选择不同的字符。使用该前缀,第一个标记(前缀字符)的行号是错误的,但所有其他标记都是正确的。

请记住:行号是从一开始的(而字符偏移量是从零开始的)。

于 2013-06-30T17:25:05.463 回答