di: Gabriele Farina 12 Giugno 2008
La fase di esecuzione è probabilmente la più semplice: abbiamo un AST che sappiamo rappresentare un'espressione sicuramente valida (dato che è stata validata nella fase di Parsing) e quello che ci resta fare è fornire un contesto di esecuzione e navigare ricorsivamente i nodi per estrarne il valore. In base al tipo di nodo il valore restituito sarà diverso. Fornire un contesto di esecuzione significa definire il valore delle variabili e delle funzioni in modo che tutti gli identificatori registrati nella SymbolTable abbiano un valore valido.
Prendiamo per esempio l'AST generato nell'esempio precedente e cerchiamo di eseguirlo nel contesto in cui la variabile a vale 10 e l'identificatore sin sia mappato alla omonima funzione per il calcolo del seno di un angolo. L'esecuzione ricorsiva valuta prima i figli dei nodi, e quando ha finito la valutazione di questi torna ai padri fino a raggiungere la cima. I nodi in grassetto sono quelli valutati nello step successivo
(call sin (multiplication (identifier a) (sum (neg (number 5)) (number 15.6)))) (call sin (multiplication (identifier a) (sum (neg (number 5)) 15.6))) (call sin (multiplication (identifier a) (sum (neg 5) 15.6))) (call sin (multiplication (identifier a) (sum -5 15.6))) (call sin (multiplication (identifier a) 10.6)) (call sin (multiplication 5 10.6)) (call sin 53) = 0.39592515018183422
Il risultato è facilmente raggiunto e probabilmente matematicamente corretto nel contesto fornito. Dato un AST avremmo anche potuto per esempio semplificare tutte le espressioni costanti e riscrivere la stessa espressione in modo più compatto.
Nel prossimo articolo vedremo come implementare la libreria ed analizzeremo il codice per comprendere come passare dalla teoria alla pratica.
Guida Yii FrameworkCome creare applicazioni Web in modo semplice e veloce con il... |
Guida Zend FrameworkDiventate professionisti dello sviluppo Web. Zend Framework è lo... |
Guida Applicazioni Facebook con PHPCome realizzare un'applicazione per Facebook. Dalle basi della... |
Ogni lunedì, direttamente nella tua e-mail: script, articoli, guide e tutorial su PHP, MySQL e Apache.
Iscriviti alla newsletter
|
|
Corso PHP per Webmaster11 Giugno 2012 a Milano |
|
|
Corso Google AdWords Base25 Giugno 2012 a Milano |
|
|
Corso Google AdWords Base05 Giugno 2012 a Roma |