当我使用我的 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 一样。我只是不确定如何通过语法来解决这个问题,所以它反映在词法分析器/解析器中