基本的な ANTLR ベースのスキャンを実行しようとしています。レクサーが必要なトークンと一致しないという問題があります。
lexer grammar DefaultLexer;
ALPHANUM : (LETTER | DIGIT)+;
ACRONYM : LETTER '.' (LETTER '.')+;
HOST : ALPHANUM (('.' | '-') ALPHANUM)+;
fragment
LETTER : UNICODE_CLASS_LL | UNICODE_CLASS_LM | UNICODE_CLASS_LO | UNICODE_CLASS_LT | UNICODE_CLASS_LU;
fragment
DIGIT : UNICODE_CLASS_ND | UNICODE_CLASS_NL;
上記の文法ではhello. world
、入力として与えられた文字列world
のみが返されます。hello
一方、 と の両方を取得することを期待していますworld
。私は何が欠けていますか?ありがとう。
追加した:
OK、hello. world
ALPHANUM ルールよりも HOST ルールを使用したほうが入力がより多くの文字と一致することがわかったので、lexer はそれを使用することを選択します。次に、入力を HOST ルールに一致させることができない場合、 を「振り返り」ません。これがレクサーの仕組みだからです。
どうすれば回避できますか?