grammar Test;
IDHEAD: ('a'..'z' | 'A'..'Z' | '_');
IDTAIL: (IDHEAD | '0'..'9');
ID: (IDHEAD IDTAIL*);
fragment
TYPE: ('text' | 'number' | 'bool');
define: 'define' ID 'as' TYPE;
問題は、defineルールがトークン、、と一致しdefineますが、ID一致しないことです。MissingTokenExceptionが発生しています。asTYPE
次のようにTYPEをインライン化すると、意図したとおりに機能します。
grammar Test;
IDHEAD: ('a'..'z' | 'A'..'Z' | '_');
IDTAIL: (IDHEAD | '0'..'9');
ID: (IDHEAD IDTAIL*);
fragment
TYPE: ('text' | 'number' | 'bool');
define: 'define' ID 'as' ('text' | 'number' | 'bool');
更新:fragment別の競合を解決するために、キーワードが追加されました:The following token definitions can never be matched because prior tokens match the same input: TYPE。