我有一个语法,其中<
有2种用法-一种用作比较操作(INT '<' INT
),另一种用作<INT ID>
。仅在后一种情况下(即仅在<
后跟(INT ID)
的情况下才如何进入模式?
我尝试在遇到pushMode
时使用<
,然后在popMode
上执行>
。但是,像INT '<' INT '+' INT
这样的表达式会失败,因为它永远不会遇到>
并且不会返回到定义了其他标记(例如+
)的默认模式。
GT : '>';
LT : '<' -> pushMode(UnitsExpr);
PLUS : '+';
MINUS : '-';
mode UnitsExpr;
Units_ID : ID -> type(ID);
Units_INT: INT ->type(INT);
Units_WS : WS -> type(WS), channel(HIDDEN);
Units_GT : GT -> type(GT), popMode;