Dopo aver studiato come un parser genera un AST, credo di poter provare a crearne uno. Prima di iniziare questo progetto, ho iniziato a riflettere su cosa avrei dovuto fare dopo aver creato un AST che rappresentasse la mia grammatica linguistica. Nonostante le mie ricerche su questo argomento, non sono emerse risorse di qualità che spiegano cosa dovrebbe essere fatto con l'AST per eseguire il codice sorgente.
Prendi questo esempio per esempio:
var = 10 + 2
.
Un parser potrebbe creare un AST simile a questo:
=
/ \
var +
/ \
10 2
Cosa si farebbe successivamente con l'esempio AST sopra. Il parser registrerebbe la variabile e il suo valore? Oppure il parser genera semplicemente l'AST, e il suo fino ad un altro programma per valutare l'AST.
Mi sembra che creare un AST stia facendo più lavoro per il resto del programma. Qualunque cosa legga l'AST deve tenere traccia di tutti i tipi di dichiarazioni e scopi. Non avrebbe più senso raggruppare i token in istruzioni e eseguire ogni singola istruzione senza un AST?
Nota : la mia domanda non è un duplicato di È sufficiente un AST per creare qualsiasi traduttore? . L'OP di quella domanda sta chiedendo se un AST è sufficiente per implementare qualsiasi funzione linguistica? . Mi sto chiedendo come si dovrebbe eseguire il codice sorgente di una lingua da un AST? . alcune parti del post possono essere simili, ma le domande complessive di ognuna sono molto diverse.