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
, as
,但不匹配TYPE
。我产生了 MissingTokenException。
如果我按如下方式内联 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
.