Antlr4 为什么antlr 4 Lexer.getCharPositionInLine()错误地返回0?

Antlr4 为什么antlr 4 Lexer.getCharPositionInLine()错误地返回0?,antlr4,Antlr4,我对antlr 4 Lexer.getCharPositionInLine()函数的理解是,它应该返回“标记的第一个字符从零开始计数的行中的字符位置”——最终的antlr 4引用 使用以下antlr 4语法,Lexer函数getCharPositionInLine()似乎总是返回0。注意注释lexer规则中的Java代码。它包含打印从getCharPositionInLine()返回的值的代码 我从命令行使用以下三个命令: java -jar antlr/antlr-4.1-complete.j

我对antlr 4 Lexer.getCharPositionInLine()函数的理解是,它应该返回“标记的第一个字符从零开始计数的行中的字符位置”——最终的antlr 4引用

使用以下antlr 4语法,Lexer函数getCharPositionInLine()似乎总是返回0。注意注释lexer规则中的Java代码。它包含打印从getCharPositionInLine()返回的值的代码

我从命令行使用以下三个命令:

java -jar antlr/antlr-4.1-complete.jar Expr.g4
javac -cp antlr/antlr-4.1-complete.jar Expr*.java
java -cp "antlr/antlr-4.1-complete.jar;." org.antlr.v4.runtime.misc.TestRig Expr compilUnit -tokens progs/hello.laf
对于此输入:

'Yo
x = 3  'Yay
我得到这个输出:

COMMENT 2:0 /'Yo
/
2:1 /x/
2:2 / /
2:3 /=/
2:4 / /
2:5 /3/
COMMENT 3:0 /  'Yay
/
[@0,4:4='x',<4>,2:0]
[@1,6:6='=',<1>,2:2]
[@2,8:8='3',<3>,2:4]
[@3,16:15='<EOF>',<-1>,3:0]
line 3:0 missing NEWLINE at '<EOF>'
COMMENT 2:0/'Yo
/
2:1/x/
2:2 / /
2:3 /=/
2:4 / /
2:5 /3/
评论3:0/“耶
/
[@0,4:4='x',2:0]
[@1,6:6='=',,2:2]
[@2,8:8='3',,2:4]
[@3,16:15='',,3:0]
第3行:0在“”处缺少换行符
由于注释lexer规则包括匹配换行符,因此lexer已经将行号增加了1,并将字符位置重置为0。然而,这与“最终Antlr 4参考”中的文档所述不符。我做错了什么?或者这是Antlr 4中的一个bug?

您会感到困惑。后者返回当前lexer位置,对于您的操作来说,显然总是0,因为您的操作紧跟在所需换行符之后

COMMENT 2:0 /'Yo
/
2:1 /x/
2:2 / /
2:3 /=/
2:4 / /
2:5 /3/
COMMENT 3:0 /  'Yay
/
[@0,4:4='x',<4>,2:0]
[@1,6:6='=',<1>,2:2]
[@2,8:8='3',<3>,2:4]
[@3,16:15='<EOF>',<-1>,3:0]
line 3:0 missing NEWLINE at '<EOF>'