键入字符串时出现Antlr错误

时间:2012-07-10 19:35:38

标签: java string antlr literals antlrworks

当我使用我的Antlr定义语言在我的Java编辑器中键入一个字符串时,只要输入第一个引号(“),我就会收到错误。

输入

    StatusString = ";
    break;

错误:

java.lang.IllegalStateException: Lexer com.lexer.IpIdeLexer@5ab38d6b
  returned null token but lexerInput.readLength()=21
  lexer-state: null
  tokenStartOffset=557, readOffset=578, lookaheadOffset=579
  Chars: "";\n        break;\n}\n\n" - these characters need to be tokenized.
Fix the lexer to not return null token in this state.

我怀疑这是因为我在语法中定义了我的字符串文字。

语法定义

STRING_LITERAL
    :  '"' ( EscapeSequence | ~('\\'|'"') )* '"' {setText(getText().substring(1,    getText().length()-1));}
    ;

fragment
EscapeSequence
    :   '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\')
    |   OctalEscape
    ;

我怀疑发生的事情是,只要它看到第一个引用它就试图提取字符串。这是实时完成的,因为它是一个使用词法分析器对语法进行颜色编码的IDE。我可以用语法来防止这个错误吗?

编辑:我想要做的是让它检查到行尾。 IDE只会从引用开始为橙色着色,直到用户完成引用,就像netbeans或eclipse那样。我只是不确定如何通过语法来解决这个问题,因此它反映在词法分析器/解析器

1 个答案:

答案 0 :(得分:1)

如果您要尝试防止错误,那么如果您确实忘记了某个地方的引用,那么您也会错过错误,而不仅仅是在您输入起始引用时。

我通过让您的IDE等待几毫秒(1/2秒左右)来解决这个问题,以便您有时间输入结束报价,或者让IDE自动插入结束报价?

尝试调整语法以便它也允许无效输入不是一个好主意,IMO。