Я в тебя верю

исал грамматику ANTLR3, разделенную на более мелкие правила для повышения читабельности. Например:

messageSequenceChart:
  'msc' mscHead bmsc 'endmsc' end
;

# Where mscHead is a shortcut to :
mscHead:
  mscName mscParameterDecl? timeOffset? end
  mscInstInterface? mscGateInterface
;

Я знаю, что встроенная функция построения AST ANTLR позволяет пользователю объявлять промежуточные узлы AST, которых не будет в конечном AST. Но что, если вы построите AST вручную?

messageSequenceChart returns [msc::MessageSequenceChart* n = 0]:
  'msc' mscHead bmsc'endmsc' end
  {
    $n = new msc::MessageSequenceChart(/* mscHead subrules accessors like $mscHead.mscName.n ? */
                                       $bmsc.n);
  }
;

mscHead:
  mscName mscParameterDecl? timeOffset? end
;

Документация не говорит о такой вещи. Похоже, мне придется создавать узлы для каждого промежуточного правила, чтобы иметь возможность доступа к их результату подправил.

Кто-нибудь знает лучшее решение?

Спасибо.

Ответы на вопрос(1)

Ваш ответ на вопрос