Logo dell'Università di Catania: Siciliae Studium Generale 1434 Logo DMI, Fondamenti di informatica
matite e gomma
Loghi istituzionali: Siciliae Studium Generale 1434, Università di Catania, Facoltà di Scienze Matematiche, Fisiche, Naturali, Insegnamento di Fondamenti di Informatica

Traduzione di programmi

Lezione 12 di Fondamenti di informatica

Docente: Giuseppe Scollo

Università di Catania
Facoltà di Scienze Matematiche, Fisiche e Naturali
Corso di Laurea in Informatica, I livello, AA 2009-10

Logo di Conformità WCAG-1 di Livello Tripla A, W3C-WAI Web Content Accessibility Guidelines 1.0 Validazione XHTML 1.0 Validazione CSS 3

Indice

  1. Traduzione di programmi
  2. il processo di traduzione
  3. esecuzione di un traduttore
  4. oltre la traduzione
  5. analisi sintattica
  6. diagrammi sintattici
  7. costruzione di alberi sintattici
  8. ambiguità sintattica
  9. analisi semantica
  10. generazione del codice
  11. ottimizzazione del codice

il processo di traduzione

due tipi principali di traduttori:

fasi principali della traduzione:

fasi del processo di traduzione

esecuzione di un traduttore

l'esistenza di una naturale sequenzialità delle fasi del processo di traduzione non ne impedisce l'esecuzione parallela

oltre la traduzione

compilazione separata:

linker:

loader:

dalla compilazione al caricamento in memoria dell'eseguibile

analisi sintattica

grammatica libera del linguaggio L :     GL = (VT, VN, P, s0)

dove:

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

diagrammi sintattici

rappresentazioni grafiche delle produzioni (regole) di una grammatica libera:

diagramma sintattico di istruzioni condizionali

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)

diagramma sintattico di identificatori diagramma sintattico di cifre decimali diagramma sintattico di lettere alfabetiche

costruzione di alberi sintattici

esempio: parsing dell'espressione x+yz

diagramma sintattico del sintagma espressione diagramma sintattico del sintagma termine diagramma sintattico del sintagma fattore

derivazione dal simbolo iniziale: top-down o bottom-up ?

albero sintattico dell'espressione x+y*z

ambiguità sintattica

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>

un albero sintattico di una espressione ambigua
un altro albero sintattico di una espressione ambigua

analisi semantica

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

generazione del codice

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

albero sintattico di una istruzione di assegnamento decorazione semantica delle foglie prima propagazione della decorazione seconda propagazione della decorazione terza propagazione della decorazione

record semantici

#nometipo
1xint
2yint
3zint
4tempint
5xint

codice generato

1X:.DATA0
2Y:.DATA0
3Z:.DATA0
4TEMP:.DATA0
 ...  
  LOADY
  ADDZ
  STORETEMP
5         LOADTEMP
  STOREX

ottimizzazione del codice

il codice generato nell'esempio precedente presenta istruzioni superflue

ottimizzazione locale:

ottimizzazione globale: