Esercizio: componiamo trasformazioni Volendo realizzare un compilatore per O su M2=(O2,E2) si decide di procedere attraverso l’introduzione di una macchina intermedia M1=(O1,E1) realizzando i seguenti compilatori: CO->O1|O1 CO1->O2|O2 Si dica come devono essere composti i due compilari in modo da fornire il compilatore (senza fare uso a E1): CO->O2|O2
Soluzione 1) Utilizzando la tecnica del Compiler-Compiler CO1->O2|O2(CO->O1|O1) = CO->O1|O2 Ora abbiamo 2 compilatori, scritti nello stesso meta: CO1->O2|O2 CO->O1|O2 2) Dobbiamo comporli mediante un operatore di composizione funzionale “.”: CO1->O2|O2 . CO->O1|O2 = CO->O2|O2 Composizione funzionale: non tutti i linguaggi hanno un operatore come “.”