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が発生しています。as
TYPE
次のように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
。