18.1.2 Conversione di oggetti AST

Gli oggetti AST, indipendentemente dall'input usato per crearli, possono venire convertiti in alberi di analisi rappresentati come alberi di liste o tuple, oppure possono venire compilati in oggetti di codice eseguibile. Alberi di analisi possono venire estratti con o senza le informazioni sul numero di riga.

ast2list( ast[, line_info])
Questa funzione accetta un oggetto AST dal chiamante come parametro ast e restituisce una lista Python che rappresenta l'albero di analisi equivalente. La rappresentazione della lista risultante può essere usata per l'ispezione o per la creazione di un nuovo albero di analisi sotto forma di lista. Questa funzione non fallisce finché è disponibile memoria per costruire la rappresentazione della lista. Se l'albero di analisi verrà usato soltanto per l'ispezione, si dovrebbe invece utilizzare ast2tuple() per ridurre il consumo e la frammentazione della memoria. Quando viene richiesta la rappresentazione della lista, questa funzione è significativamente più veloce rispetto al recupero della rappresentazione sotto forma di tupla e la conversione di questa in liste annidate.

Se line_info è vero, l'informazione relativa al numero di riga verrà inclusa per tutti i simboli terminali come terzo elemento della lista che rappresenta il simbolo. Notate che il numero di riga fornito specifica la riga sulla quale il simbolo termina. Questa informazione viene omessa se l'opzione ha un valore falso o viene omessa.

ast2tuple( ast[, line_info])
Questa funzione accetta dal chiamante un oggetto AST come parametro ast e restituisce una tupla Python che rappresenta l'albero di analisi equivalente. A parte restituire una tupla invece di una lista, questa funzione è identica ad ast2list().

Se line_info è vero, l'informazione relativa al numero di riga verrà inclusa per tutti i simboli terminali come terzo elemento della lista che rappresenta il simbolo. Questa informazione viene omessa se l'opzione ha valore falso o viene omessa.

compileast( ast[, filename = '<ast>'])
Il compilatore di bytecode Python può venire invocato su un oggetto AST per produrre oggetti di codice che possano essere utilizzati come parti di un'istruzione exec o di una chiamata alla funzione built-in eval(). Questa funzione fornisce l'interfaccia al compilatore, passando l'albero di analisi interno dal parametro ast al parser, usando il nome del file sorgente specificato dal parametro filename. Il valore predefinito fornito per filename indica che il sorgente era un oggetto AST.

Compilare un oggetto AST può generare eccezioni relative alla compilazione; un esempio sarebbe un'eccezione SyntaxError provocata dall'albero di analisi per del f(0): questa istruzione viene considerata corretta all'interno della grammatica formale di Python, ma non lo è come costrutto del linguaggio. L'eccezione SyntaxError sollevata per questa condizione viene di solito realmente generata dal compilatore bytecode di Python, il che è la ragione per cui possa venire sollevata a questo punto dal modulo parser. La maggior parte delle cause degli errori di compilazione possono essere diagnosticate sistematicamente ispezionando l'albero di analisi.

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