18.1.1 Creazione di oggetti AST

Gli oggetti AST possono venire creati dal codice sorgente o da un albero di analisi. Quando si crea un oggetto AST da sorgente, vengono usate differenti funzioni per creare le forme 'eval' ed 'exec'.

expr( source)
La funzione expr() analizza il parametro source come fosse, per così dire, un input a "compile(source, 'file.py', 'eval')". Se l'analisi va a buon fine, viene creato un oggetto AST per contenere la rappresentazione interna dell'albero di tale analisi, altrimenti viene sollevata un'eccezione appropriata.

suite( source)
La funzione suite() analizza il parametro source come fosse, per così dire, un input a "compile(source, 'file.py', 'exec')". Se l'analisi va a buon fine, viene creato un oggetto AST per contenere la rappresentazione interna dell'albero di tale analisi, altrimenti viene sollevata un'eccezione appropriata.

sequence2ast( sequence)
Questa funzione accetta un albero di analisi rappresentato come una sequenza e ne costruisce, se possibile, una rappresentazione interna. Se inoltre essa verifica che l'albero è conforme alla grammatica Python e che tutti i nodi sono di tipo valido nella versione Python in uso, viene creato un oggetto AST dalla rappresentazione interna e restituito al chiamante. Se si verifica un problema durante la creazione della rappresentazione interna, oppure se l'albero non può essere convalidato, viene sollevata un'eccezione ParserError. Un oggetto AST creato in questo modo non dovrebbe essere compilabile correttamente; le normali eccezioni sollevate durante la compilazione potrebbero essere ancora sollevate quando l'oggetto AST viene passato alla funzione compileast(). Ciò potrebbe indicare problemi non correlati alla sintassi (come un'eccezione MemoryError), ma potrebbe anche essere dovuto a costrutti quale il risultato dell'analisi di del f(0), che sfugge al parser Python ma viene controllata dal compilatore bytecode.

Sequenze che rappresentano simboli terminali possono venire rappresentate come liste di due elementi nella forma (1, 'name') oppure come liste di tre elementi nella forma (1, 'name', 56). Se il terzo elemento è presente, viene considerato come un numero di riga valido. Il numero di riga può essere specificato per qualsiasi sotto insieme dei simboli terminali nell'albero di input.

tuple2ast( sequence)
Questa funzione è analoga a sequence2ast(). Questa chiamata a funzione viene mantenuta per compatibilità con le versioni precedenti.

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