Я использую ANTLR для построения дерева (CommonTree), например, follwing (язык: JAVA):
Parser.prog_return r = parser.prog();
CommonTree t = (CommonTree) r.getTree();
Теперь мне нужно передать «t» в качестве параметра и внести некоторые изменения, не затрагивая исходное дерево. Однако, с указателем Java, это не могло быть сделано, поэтому мне нужно продублировать дерево.
Я искал в интернете, что я нашел, так это метод dupTree () класса ASTFactory.
Буду признателен за любые предложения или советы о том, как этого добиться!
EDIT
@ Барт Киерс, спасибо за ваш ответ, он абсолютно работает!
Я вижу, что вы сначала проходите глубину по дереву и создаете объект CommonTree для каждого посещенного узла.
Мой вопрос сейчас, какова связь между CommonToken и CommonTree, и что делают эти атрибуты:
cTok.setCharPositionInLine(oTok.getCharPositionInLine());
cTok.setChannel(oTok.getChannel());
cTok.setStartIndex(oTok.getStartIndex());
cTok.setStopIndex(oTok.getStopIndex());
cTok.setTokenIndex(oTok.getTokenIndex());