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



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

RPG中的一句话就像

26 C  N20      'PICK'    CHAINORDOFIL              09

在这里,CHAIN从位置27到32,ORDOFIL从33到41。

我匹配链和以下标识符的规则就像

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?

有什么建议吗?提前致谢

我能够通过使用模式来解决这个问题。

一旦我匹配CHAIN,我就会切换到一种模式并在那里处理标识符(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 ;

相关内容

  • 没有找到相关文章

最新更新