ANTLR IDEのバグ
ANTLRのJarでコード生成すると問題なく動くのに、IDEで動かすと想定外の動作をする場合があるようだ。ウェブでもそのようなことを書いてる記事を見た。
私の場合は、以下のようなエスケープシーケンス有のりのストリングで問題が起きた。
lexer grammar TestLexer; options { language = Java; } @lexer::header {package hase;} STRING : '"' ( ESC_SEQ | ~('\\'|'"') )* '"'; fragment ESC_SEQ : '\\' ('b'|'t'|'n'|'f'|'r'|'"') | '\\' ('\''|'\\') ;
この
( ESC_SEQ | ~('\\'|'"') )*
の右側
~('\\'|'"')
がちゃんとマッチしない。
例えば、「インタープリター」タブで
"hoge"
を与えると、MismatchedTokenException となる。
""も"\t"も正常に認識するのに。
ちなみに、
"\thoge"
を与えると、すべて ESC_SEQ 扱いになっているようだ。
また、ためしに、
( ~('\\'|'"') | ESC_SEQ )*
と左右を入れ替えてみると、今度は ESC_SEQ のほうが認識されなくなる。
ちゃんと動けは完全に eclipse で完結できるし、Token毎の動作確認が簡単にできたりと、ANTLRWorks よりもいいのだが・・・とっても惜しい。