NetBeans词法分析器抛出异常识别尾随空格

时间:2013-12-31 16:20:23

标签: java netbeans antlr antlr4 netbeans-platform

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

WhiteSpace : [ \t\r\n]+ -> 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词法分析器(以及可能的其他集成)集成时才会出错。

1 个答案:

答案 0 :(得分:0)

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

WhiteSpace : [ \t\r\n]+ -> channel(HIDDEN);

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