2016-01-02 14 views
7

sto lavorando con Abstract Syntax Trees in Python 3. La biblioteca ast dà molti modi per ottenere i bambini del nodo (è possibile utilizzare iter_child_nodes() o walk()), ma non modi per ottenere genitore di uno. Inoltre, ogni nodo ha collegamenti ai suoi figli, ma non ha collegamenti con i suoi genitori.Ottenere genitore del nodo AST in Python

Come posso ottenere il genitore del nodo AST se non si desidera scrivere qualche plug-in nella libreria ast?

Qual è il modo più corretto per farlo?

+0

È possibile attraversare l'albero e creare una tabella di ricerca inversa. –

risposta

2

È possibile creare una tabella hash che associ i nodi AST ai nodi AST ed eseguire la scansione (in modo ricorsivo) del proprio albero AST più in alto per registrarsi nella tabella hash genitore di ciascun nodo.

1

Non sarebbe davvero un plug-in, ma è sempre possibile scrivere una funzione che aggiunge un elemento debole al genitore in ogni bambino.

5

Ecco alcuni codice vero e proprio:

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

Non c'è alcun bisogno di una tabella di hash, si può semplicemente mettere un attributo direttamente sul nodo.

Problemi correlati