Si dica in quale modo la trasformazione di Thompson, TF, può essere considerata come definente un compilatore. In particolare, si dica: –a) chi sono il source, 0, e l’object, 1 –b) si formalizzino 0 e 1 come linguaggi (sintassi, semantica) –c) si mostri la struttura del compilatore rispetto la sottostante macchina, ovvero si dica chi è il meta e il suo esecutore mostrando il relativo diagramma e la relazione che preserva la semantica. Esercizio: Compiliamo le espressioni regolari
Soluzione a)Il linguaggio delle espressioni regolari è il source 0, il linguaggio degli automi a stati finiti è l’object 1. b) Il linguaggio delle espressioni regolari è definito dalla coppia: (E , [-]: E -> 2 * ) Il linguaggio degli automi a stati finiti è definito dalla coppia: (FSA, =>*: ( *xS) x ( *xS)) c) metalinguaggio EL 2 FT 0->1|2 E FSA e E FT(e) FSA oggetto per L 1sorgente di L 0 Macchina Host (language FSA) E FSA Macchina Target RTS FT(e), n {success,failure} 0->1|2 L2 -FT 0->1|2 è la trasformazione di Thompson scritta in L2 -n è ora una stringa di caratteri di -{success,failure} -{success,failure} oppure {token,null}
metalinguaggio EL 2 FT 0->1|2 E FSA e E FT(e) FSA oggetto per L 1sorgente di L 0 Macchina Host (language FSA) E FSA Macchina Target RTS FT(e), n {success,failure} (Linguaggio C) E C Macchina Target FT+ (I,R) (e) n FT+ (I,R) 0->C|C E C FSA e E FT+ (I,R) (e) C FSA dipende da R -FT+(I,R) -FT+(I,R) è LEX -I -I è un esecutore per FSA (descritte in accordo a date regole) -R -R include il Run-Time Support e altre funzionalità di I/O LEX:- un generatore di scanners