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 のように、ユーザーが引用を完了するまで、引用から始まる行をオレンジ色にします。文法を介してこれを行う方法がわからないので、レクサー/パーサーに反映されます