NetBeans 词法分析器会引发识别尾随空格的异常



我有一个简单的语法用ANTLR4编写的,其中包括(除其他外)空格规则:

WhiteSpace : [ trn]+ -> skip;

这是使用 org.netbeans.spi.lexer.Lexer 集成到 NetBeans 平台应用程序中的。当输入有尾随空格(在 EOF 之前)时,我得到以下异常:

java.lang.IllegalStateException: Lexer ExpressionLexer@2cdea2eb
  returned null token but lexerInput.readLength()=1
  lexer-state: null
  tokenStartOffset=20, readOffset=21, lookaheadOffset=22
  Chars: "n" - these characters need to be tokenized.
Fix the lexer to not return null token in this state.

如何使此尾随空格不会导致错误?

编辑:仅使用 ANTLR 词法分析和解析器代码即可正常工作,没有错误。此错误仅在与 NetBeans 词法分析器(可能还有其他集成)集成时出现。

更改WhiteSpace规则以将令牌发送到隐藏通道,而不是完全跳过。

WhiteSpace : [ trn]+ -> channel(HIDDEN);

解析器不会看到空格,但 NetBeans 词法分析器会很高兴为所有输入返回一个有效的令牌。

相关内容

  • 没有找到相关文章

最新更新