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