Я пишу синтаксический анализатор для 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 во втором?
Любое предложение? заранее спасибо