2016-01-02 2 views
7

Я работаю с абстрактным синтаксических деревьев в Python 3. ast библиотека предоставляет множество способов получить дети узла (вы можете использовать iter_child_nodes() или walk()), но не способы, чтобы получить родителя одного. Кроме того, у каждого узла есть ссылки на его дочерние элементы, но у него нет ссылок на его родителя.Получение родителя AST узла в Python

Как я могу получить родительский узел AST, если я не хочу писать некоторый плагин в библиотеку ast?

Каков наилучший способ сделать это?

+0

Вы можете пересечь дерево и создать обратную таблицу поиска. –

ответ

2

Вы можете создать хеш-таблицу, связывающую узлы AST с узлами AST и сканировать (рекурсивно) ваше самое верхнее дерево AST для регистрации в этой хэш-таблице родительского элемента каждого узла.

1

На самом деле это не будет плагин, но вы всегда можете написать функцию, которая добавляет weakref к родительскому в каждом дочернем.

5

Вот некоторые фактические код:

for node in ast.walk(root): 
    for child in ast.iter_child_nodes(node): 
     child.parent = node 

Там нет необходимости в хэш-таблицу, вы можете просто поставить атрибут непосредственно на узле.

Смежные вопросы