Docenti:
Marina Madonia &
Giuseppe Scollo
Università di Catania
Facoltà di Scienze Matematiche, Fisiche e Naturali
Corso di Laurea in Informatica, I livello, AA 2008-09
due tipi principali di traduttori:
fasi principali della traduzione:
l'esistenza di una naturale sequenzialità delle fasi del processo di traduzione non ne impedisce l'esecuzione parallela
compilazione separata:
linker:
loader:
grammatica libera del linguaggio L :
GL =
(VT, VN, P, s0)
dove:
X
(VT ∪ VN)* :
produzioni (regole) della grammatica
linguaggio L generato da GL : sottoinsieme di VT* costituito dalle
determinare (se esiste) una tale derivazione, per una qualsiasi stringa data di VT*, è l'obiettivo dell'analisi sintattica
rappresentazioni grafiche delle produzioni (regole) di una grammatica libera:
un cammino dall'ingresso all'uscita del diagramma sintattico rappresenta la stringa R di una produzione (N, R); il diagramma stesso è etichettato dal non-terminale N
notazione BNF estesa: possibilità di alternative (diramazioni) e iterazioni (cicli)
esempio: parsing dell'espressione
x+y∗
z
derivazione dal simbolo iniziale: top-down o bottom-up ?
una grammatica è ambigua se qualche espressione del linguaggio che essa genera ha più derivazioni dal simbolo iniziale
esempio: il precedente diagramma sintattico per
istruzioni condizionali
if <espressione> then
<istruzione> [else <istruzione>]
rende ambigua la grammatica di simbolo iniziale <istruzione>
non tutte le espressioni sintatticamente corrette hanno significato
ad es., la frase seguente ha ben quattro derivazioni nella grammatica inglese:
tuttavia, tre di esse sono prive di significato
nel processo di traduzione dei programmi, l'analisi semantica statica discrimina gli alberi risultanti dall'analisi sintattica in base ad ulteriori vincoli, che devono essere soddisfatti perché l'espressione sia traducibile
detti vincoli possono essere espressi da regole semantiche associate a produzioni di una grammatica libera; le grammatiche con attributi permettono di formalizzare tali regole con precisione
l'analisi semantica genera alberi sintattici decorati, ai cui nodi sono associati record semantici, con informazione di tipo e riferimenti ad unità lessicali
input: alberi sintattici decorati, prodotti dall'analisi semantica
carattere essenziale del processo: estendere le decorazioni dei nodi dell'albero con opportune sequenze di istruzioni del linguaggio oggetto
record semantici
# | nome | tipo |
1 | x | int |
2 | y | int |
3 | z | int |
4 | temp | int |
5 | x | int |
codice generato
1 | X: | .DATA | 0 |
2 | Y: | .DATA | 0 |
3 | Z: | .DATA | 0 |
4 | TEMP: | .DATA | 0 |
... | |||
LOAD | Y | ||
ADD | Z | ||
STORE | TEMP |
5 | LOAD | TEMP | |
STORE | X |
il codice generato nell'esempio precedente presenta istruzioni superflue
ottimizzazione locale:
ottimizzazione globale:
x∗(y+z)
, senza generare alcuna ambiguità sintattica.
<, ==, >
di confronto di espressioni aritmetiche;