Оба являются допустимыми параметрами.Если вы собираетесь писать грамматику дерева для других целей (оценивая?), Вы можете просто скопировать эту грамматику и дать ей другое имя и проверить в этой грамматике дерева наличие определенных узлов.
AFAIKнет доступных утилит для ручного «обхода» (небольшой части) дерева , и в этом нет особой необходимости, поскольку это тривиальная операция (псевдокод):
walk(Tree) {
if Tree is null {
return
}
inspect the Tree (node) type
for every Child in Tree.getChildren() {
walk(Child)
}
}
EDIT
Подумав немного больше об этом, я вспомнил какую-то новую функцию, которая более или менее выполняет то, что вы хотите.Термин ANTLR, который вы ищете, - это «сопоставление с образцом дерева».
Цитата: «Вместо указания всей грамматики дерева средство сопоставления с образцом дерева позволяет нам сосредоточиться только на тех поддеревьях, которые нас интересуют.- http://www.antlr.org/wiki/display/ANTLR3/Tree+pattern+matching "
Имейте в виду, что для этого вам нужен ANTLR 3.2+.