19.4 Utilizzo dei Visitor per percorrere gli AST

Il modello visitor è ... Il package compiler utilizza una variante del modello visitor che sfrutta i vantaggi delle caratteristiche introspettive di Python per eliminare la necessità di gran parte dell'infrastruttura visitor.

Non c'è bisogno che le classi da visitare siano state programmate per accettare i visitor. Il visitor necessita solo di definire i metodi di visita per le classi a cui è specificamente interessato; un metodo di visita predefinito può gestire il resto.

walk( tree, visitor[, verbose])

class ASTVisitor( )

L'ASTVisitor è responsabile dell'attraversamento dell'albero nell'ordine corretto. Il percorrimento inizia con una chiamata a preorder(). Per ogni nodo, passa l'argomento visitor a preorder() alla ricerca un metodo chiamato 'visitNodeType', dove NodeType è il nome della classe del nodo; per esempio, per un nodo While dovrebbe essere chiamato un metodo visitWhile(). Se il metodo esiste, viene chiamato con il nodo come suo primo argomento.

Il metodo visitor per un tipo particolare di nodo può controllare come i nodi figli vengano visitati durante il percorrimento. L'ASTVisitor modifica l'argomento visitor aggiungendo un metodo visit al visitor; questo metodo può essere usato per visitare un nodo figlio particolare. Se nessun visitor viene trovato per un particolare tipo di nodo, viene chiamato il metodo default().

Gli oggetti ASTVisitor possiedono i seguenti metodi:

default( node[, ...])

dispatch( node[, ...])

preorder( tree, visitor)

Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.