在lexer中获得真正的位置。用例子

时间:2013-07-01 19:03:37

标签: netbeans-7 netbeans-platform antlr4

我用netbeans7和ANTLR4编写编辑器 我在my.g4文件中有一行

Label       : {(getCharPositionInLine()==0)}? ID; 

适用于静态文件,但编辑getCharPositionInLine()时常常在其他地方返回0。 如何在词法分析器中找到真正的位置?

我注意到,虽然编辑文本编辑器发送给词法分析器并非所有文本都只改变了,而且在这个片段中工作lexer。我不知道怎么改变它。

我用这个问题创建了例子 https://github.com/daimor/SimpleANTLR

1 个答案:

答案 0 :(得分:1)

如果您的输入流不代表从文件开头开始的流,那么您需要使用实际启动流的行/列初始化词法分析器。

lexer.getInterpreter().setLine(actualLine);
lexer.getInterpreter().setCharPositionInLine(actualCharPositionInLine);

如果不这样做,词法分析器将始终假定输入流从文件的开头开始。