是否可以在Antlr4 lexer中有条件地进入模式?

时间:2019-05-16 15:41:46

标签: antlr antlr4

我有一个语法,其中<有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;

0 个答案:

没有答案