Netbeans 在lexer中获得真正的位置。添加示例

Netbeans 在lexer中获得真正的位置。添加示例,netbeans,netbeans-platform,antlr4,Netbeans,Netbeans Platform,Antlr4,我使用netbeans7和ANTLR4编写编辑器 我的.g4文件中有一行 Label : {(getCharPositionInLine()==0)}? ID; 这适用于静态文件,但在编辑getCharPositionInLine()时,在其他位置通常返回0。 如何在lexer获得真正的职位 已更新 我用这个问题创建了一个例子 您的错误可能是在构建lexer和/或输入流的过程中发生的(即,此处未显示的代码)。您上面描述的谓词对于ANTLR 4 lexer将像预期的那样工作 此外,

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

Label       : {(getCharPositionInLine()==0)}? ID; 
这适用于静态文件,但在编辑getCharPositionInLine()时,在其他位置通常返回0。
如何在lexer获得真正的职位

已更新
我用这个问题创建了一个例子

您的错误可能是在构建lexer和/或输入流的过程中发生的(即,此处未显示的代码)。您上面描述的谓词对于ANTLR 4 lexer将像预期的那样工作

此外,如果
getCharPositionInLine()==0
,则以下条件中的一个也正好成立:

  • \u input.index()==0
  • \u input.LA(-1)='\n'

  • 我在本教程@DAiMor中编写了我的编辑器,正如Sam已经提到的:谓词很好,您的问题很可能源于语法中的另一个规则/代码块。我注意到,在编辑发送给lexer的文本编辑器时,并非所有文本都发生了更改,而在这个片段中,lexer正在工作。我不知道如何更改它。您提供的代码/语法数量有限,无法复制您的观察结果“在其他地方经常返回0”。您是否可以发布足够的代码(和示例输入),以便其他人可以复制?如果没有,我看不出有谁能在这方面帮助你。我将在稍后制作代码示例。我在github上添加了示例