根据位置 ANTLR4 将一个单词标记为多个标记

Tokenize one word into multiple tokens based on position ANTLR4

我正在为 RPG 2 编写解析器。RPG 2 是基于位置的,我使用谓词来实现这一点。但是有一个地方我卡住了。

RPG中的一个说法是

  26 C  N20      'PICK'    CHAINORDOFIL              09

此处CHAIN从27位跨越到32位,ORDOFIL从33位跨越到41位。

我匹配 Chain 和后面的标识符的规则是这样的

CALCULATION_OPERATIONS_CHAIN : CHAIN_T  {(getCharPositionInLine()>=27) &&(getCharPositionInLine()<=32)}? ->type(CHAIN_T);

CALCULATION_FACTOR2_1:  IDENT_T  {(getCharPositionInLine()>=33) && (getCharPositionInLine()<=42)}?   ->type(IDENT_T);

但我的问题是 "CHAINORDOFIL" 匹配第二条规则(如 IDENT_T)。

如何匹配第一条规则中的 CHAIN 和第二条规则中的 ORDOFIL?

有什么建议吗?提前致谢

我使用模式解决了这个问题。

匹配链后,我切换到一种模式并处理其中的标识符 (ORDOFIL)。

规则是这样的

CALCULATION_OPERATIONS_CHAIN : CHAIN_T  {(getCharPositionInLine()>=27) && (getCharPositionInLine()<=32)}? ->type(CHAIN_T),pushMode(CHAIN);

mode CHAIN;
CHAIN_WHITESPACE_T : ' ' ->skip;
CHAIN_FACTOR2_1: IDENT_T {(getCharPositionInLine()>=33) && (getCharPositionInLine()<=42)}?  ->type(IDENT_T);
CHAIN_ENDLINE : NEWLINE -> type(EOL),popMode,popMode ;