我用netbeans7和ANTLR4编写编辑器 我在my.g4文件中有一行
Label : {(getCharPositionInLine()==0)}? ID;
适用于静态文件,但编辑getCharPositionInLine()时常常在其他地方返回0。 如何在词法分析器中找到真正的位置?
我注意到,虽然编辑文本编辑器发送给词法分析器并非所有文本都只改变了,而且在这个片段中工作lexer。我不知道怎么改变它。
我用这个问题创建了例子 https://github.com/daimor/SimpleANTLR
答案 0 :(得分:1)
如果您的输入流不代表从文件开头开始的流,那么您需要使用实际启动流的行/列初始化词法分析器。
lexer.getInterpreter().setLine(actualLine);
lexer.getInterpreter().setCharPositionInLine(actualCharPositionInLine);
如果不这样做,词法分析器将始终假定输入流从文件的开头开始。