35
LFC Nozioni introduttive Informazioni generali Parsing, traduzione e compilazione Alfabeti, stringhe e linguaggi Linguaggi formali e compilazione Corso di Laurea in Informatica A.A. 2008/2009

Introduzione a Linguaggi formali e compilazione

Embed Size (px)

Citation preview

Page 1: Introduzione a Linguaggi formali e compilazione

LFC

Nozioni introduttiveInformazioni generali

Parsing, traduzione ecompilazione

Alfabeti, stringhe elinguaggi

Linguaggi formali e compilazioneCorso di Laurea in Informatica

A.A. 2008/2009

Page 2: Introduzione a Linguaggi formali e compilazione

LFC

Nozioni introduttiveInformazioni generali

Parsing, traduzione ecompilazione

Alfabeti, stringhe elinguaggi

Linguaggi formali e compilazione

Nozioni introduttiveInformazioni generaliParsing, traduzione e compilazioneAlfabeti, stringhe e linguaggi

Page 3: Introduzione a Linguaggi formali e compilazione

LFC

Nozioni introduttiveInformazioni generali

Parsing, traduzione ecompilazione

Alfabeti, stringhe elinguaggi

Linguaggi formali e compilazione

Nozioni introduttiveInformazioni generaliParsing, traduzione e compilazioneAlfabeti, stringhe e linguaggi

Page 4: Introduzione a Linguaggi formali e compilazione

LFC

Nozioni introduttiveInformazioni generali

Parsing, traduzione ecompilazione

Alfabeti, stringhe elinguaggi

Informazioni generali sul corso

I Sito web:http://algo.ing.unimo.it/people/mauro/dida/2008-09_LFC/

I Ricevimento (nel semestre di lezione): Mercoledì h14.30-16.00, ufficio del docente

I Materiale didattico: si veda il sito webI Modalità d’esame: scritto (orale solo su richiesta)I CFU assegnati: 6

Page 5: Introduzione a Linguaggi formali e compilazione

LFC

Nozioni introduttiveInformazioni generali

Parsing, traduzione ecompilazione

Alfabeti, stringhe elinguaggi

Obiettivi formativi

I Due obiettivi principali (che si riflettono nel titolostesso dell’insegnamento).

I Acquisizione di nozioni di base sulla teoria deilinguaggi formali e degli automi:

I una delle prime teorie “solide” sulle quali si èsviluppata l’Informatica come disciplina scientifica;

I fornisce basi per la costruzione di traduttori;I è utile in svariati altri campi dell’Informatica.

I Sviluppo di conoscenze sui compilatori e dellacapacità di realizzare semplici parser e traduttori.

Page 6: Introduzione a Linguaggi formali e compilazione

LFC

Nozioni introduttiveInformazioni generali

Parsing, traduzione ecompilazione

Alfabeti, stringhe elinguaggi

Argomenti trattati

I Alfabeti, stringhe e linguaggi formaliI Grammatiche e automiI Analisi lessicale e analisi sintatica (parsing)I Traduzione e compilazione

Page 7: Introduzione a Linguaggi formali e compilazione

LFC

Nozioni introduttiveInformazioni generali

Parsing, traduzione ecompilazione

Alfabeti, stringhe elinguaggi

Linguaggi formali e compilazione

Nozioni introduttiveInformazioni generaliParsing, traduzione e compilazioneAlfabeti, stringhe e linguaggi

Page 8: Introduzione a Linguaggi formali e compilazione

LFC

Nozioni introduttiveInformazioni generali

Parsing, traduzione ecompilazione

Alfabeti, stringhe elinguaggi

Parsing

I Un parser (analizzatore sintattico) è uno strumentoche, in termini generali, consente di dare struttura aduna descrizione lineare.

I La struttura viene conferita in accordo a regoleespresse generalmente da una grammatica.

I Alcuni esempi:I passare dalla descrizione testuale di un grafo ad una

sua rappresentazione in liste di adiacenze;I dato un insieme di pagine web, creare un grafo che

ne descriva la struttura dei collegamenti;I dato un documento XML, creare una

rappresentazione dell’informazione in essocontenuta (detta information set) da renderedisponibile all’applicazione client.

I In tutti i casi, il parsing include un’analisi dellacorrettezza formale (well-formedness) delle stringheda analizzare.

Page 9: Introduzione a Linguaggi formali e compilazione

LFC

Nozioni introduttiveInformazioni generali

Parsing, traduzione ecompilazione

Alfabeti, stringhe elinguaggi

Traduzione

I Il parsing opera esclusivamente al livello di sintassi(cioè della corretta formazione delle frasi).

I Un traduttore è un programma che effettua latraduzione automatica da un linguaggio ad un altro.

I Nella traduzione (e quindi nella compilazione) èimportante che venga mantenuto il significato(semantica) delle frasi.

I Che cosa sia il “significato” di una frase dipende peròpesantemente dall’ambito applicativo:

I per un’espressione aritmetica/logica il significato èun valore numerico/di verità;

I per un programma il significato è il “comportamentoindotto” nella macchina (semantica operazionale);

I esempi da altri campi (Musica, Chimica, ...).

Page 10: Introduzione a Linguaggi formali e compilazione

LFC

Nozioni introduttiveInformazioni generali

Parsing, traduzione ecompilazione

Alfabeti, stringhe elinguaggi

Linguaggi formali

I Pur esistendo “tentativi” di applicazione di metodiinformatici alla traduzione di scritti in linguaggionaturale, il successo della traduzione automatica èlimitato all’ambito dei linguaggi formali.

I Esempi di linguaggi formali sonoI linguaggi di programmazione, come C, C++ e Java;I linguaggi di descrizione e/o manipolazione di dati,

come XML e SQL;I in ambito non informatico, il linguaggio della Musica

e quello della Chimica (genericamente intesi).I È formale un linguaggio che obbedisce a precise

regole formali (formalismi) di composizione dellefrasi.

Page 11: Introduzione a Linguaggi formali e compilazione

LFC

Nozioni introduttiveInformazioni generali

Parsing, traduzione ecompilazione

Alfabeti, stringhe elinguaggi

Compilazione ed interpretazione

I Il più importante caso di traduzione in ambitoinformatico è la compilazione di linguaggi di altolivello in linguaggi macchina (o comunque linguaggimolto più vicini alla macchina).

I Un compilatore per un linguaggio L e una macchinaM è un traduttore che, data una stringa(programma) in linguaggio L, produce un programmaequivalente nel linguaggio macchina diM.

I Un’alternativa alla compilazione è l’interpretazionediretta dei programmi.

I Nel caso dell’interpretazione di L suM, unprogramma in esecuzione suM prende direttamentein input frasi in linguaggio L e le “esegue”,producendo in output il risultato dell’esecuzione.

Page 12: Introduzione a Linguaggi formali e compilazione

LFC

Nozioni introduttiveInformazioni generali

Parsing, traduzione ecompilazione

Alfabeti, stringhe elinguaggi

Compilazione ed ed interpretazione

I Compilazione ed esecuzioneProgramma

P in linguaggio L

Compilatoredi L per il

computer M

Input per P

Programma P incodice eseguibilesul computer M

CPU di M Risultati

I Interpretazione puraProgramma

P in linguaggio L

Input per P

RisultatiInterprete dell inguaggio L

Page 13: Introduzione a Linguaggi formali e compilazione

LFC

Nozioni introduttiveInformazioni generali

Parsing, traduzione ecompilazione

Alfabeti, stringhe elinguaggi

Soluzioni “miste”

I Compilazione ed intepretazione in JavaProgrammaP in Java

CompilatoreJava

Input per P

Programma P incodice intermedio

(bytecode)

JRE percomputer M Risultati

I In tutti i casi (anche nell’interpretazione “pura”), letecniche di compilazione giocano un ruolofondamentale.

Page 14: Introduzione a Linguaggi formali e compilazione

LFC

Nozioni introduttiveInformazioni generali

Parsing, traduzione ecompilazione

Alfabeti, stringhe elinguaggi

Linguaggi compilati e linguaggi interpretati

I In linea di principio, di uno stesso linguaggio Lpotrebbero esistere implementazioni compilate edimplementazioni interpretate.

I Nella pratica, i linguaggi “si specializzano” in unasola delle due alternative, anche (o forse soprattutto)perché compilazione ed interpretazione offronovantaggi e svantaggi complementari, che sono poiriflessi nei linguaggi stessi.

I C, C++, Fortran e Pascal sono linguaggi compilati.I I linguaggi dinamici sono linguaggi interpretati.I Il caso di Java.

Page 15: Introduzione a Linguaggi formali e compilazione

LFC

Nozioni introduttiveInformazioni generali

Parsing, traduzione ecompilazione

Alfabeti, stringhe elinguaggi

Schema organizzativo di un compilatoreProgramma sorgente

Analisi lessicale

Analisi sintattica (parsing)

Generazione del codice intermedio

Ottimizzazione del codice

Generazione del codice

Codice oggetto

Schema tratto dal "Dragon book" (1977)

Gestione degli erroriGestione dellaSymbol table

Page 16: Introduzione a Linguaggi formali e compilazione

LFC

Nozioni introduttiveInformazioni generali

Parsing, traduzione ecompilazione

Alfabeti, stringhe elinguaggi

Breve descrizione delle fasi

Analisi lessicale Un analizzatore lessicale, detto anchescanner, raggruppa i caratteri delladescrizione lineare in token, cioè “oggetti”significativi per la successiva analisisintattica. Esempi di token sono i numeri, gliidentificatori e le parole chiave di unlinguaggio di programmazione.

Analisi sintattica Un analizzatore sintattico, detto ancheparser, organizza gruppi di token in strutturesintattiche. Un semplice esempio di taleorganizzazione è il passaggio da unasequenza di numeri, operatori aritmetici eparentesi (che sono token) ad unaespressione (che è una struttura sintattica)rappresentata come albero.

Page 17: Introduzione a Linguaggi formali e compilazione

LFC

Nozioni introduttiveInformazioni generali

Parsing, traduzione ecompilazione

Alfabeti, stringhe elinguaggi

Breve descrizione delle fasi

Generazione del codice intermedio A partire dallastruttura prodotta dal parser, un generatoredi codice intermedio produce una sequenzadi istruzioni in una sorta di linguaggiointermedio che, pur molto semplice, noncoincide con il linguaggio macchina.

Ottimizzazione del codice In questa fase operanoalgoritmi che manipolano il programmascritto in codice intermedio in modo daottenere un programma equivalente che (ingenere) utilizza una minore quantità dispazio e/o che “gira” più velocemente .

Page 18: Introduzione a Linguaggi formali e compilazione

LFC

Nozioni introduttiveInformazioni generali

Parsing, traduzione ecompilazione

Alfabeti, stringhe elinguaggi

Breve descrizione delle fasi

Generazione del codice In questa fase il programma incodice intermedio (eventualmenteottimizzato) viene trasformato in codicemacchina. Qui vengono prese le decisionisull’allocazione dei dati in memoria, il codicedi accesso e l’utilizzo dei registri.

Gestione della tabella dei simboli È un’attività cheaccompagna tutte le fasi della compilazione.La tabella dei simboli è essenzialmente undizionario che registra tutti i nomi usati nelprogramma e le informazioni ad essoassociate (esempio, un identificatore e il suotipo).

Page 19: Introduzione a Linguaggi formali e compilazione

LFC

Nozioni introduttiveInformazioni generali

Parsing, traduzione ecompilazione

Alfabeti, stringhe elinguaggi

Breve descrizione delle fasi

Gestione degli errori Durante una qualunque delle fasi sipossono verificare degli errori, che devonoessere individuati e segnalati con opportunimessaggi diagnostici. Gli esempi piùfacilmente comprensibili di errore riguardanole fasi di analisi lessicale (ad esempio, unidentificatore che contiene un carattere nonammesso) e di analisi sintattica (ad esempioun’espressione aritmetica mal formata). Ingenerale se vengono rilevati errori non vieneprodotto il codice oggetto.

Page 20: Introduzione a Linguaggi formali e compilazione

LFC

Nozioni introduttiveInformazioni generali

Parsing, traduzione ecompilazione

Alfabeti, stringhe elinguaggi

Linguaggi formali e compilazione

Nozioni introduttiveInformazioni generaliParsing, traduzione e compilazioneAlfabeti, stringhe e linguaggi

Page 21: Introduzione a Linguaggi formali e compilazione

LFC

Nozioni introduttiveInformazioni generali

Parsing, traduzione ecompilazione

Alfabeti, stringhe elinguaggi

Nozione di alfabeto

I Un alfabeto è un insieme finito di simboli, detti anchecaratteri.

I I simboli di un alfabeto verranno scriti usando il fonttypewriter.

I Esempi di alfabeti importanti:I I set di caratteri ASCII e UNICODE;I B = {0,1}, l’alfabeto binario;I D = {A,C,G,T}, l’alfabeto del DNA.

I La lettera greca Σ indicherà un generico alfabeto.I Le lettere finali dell’alfabeto latino (x , y e z)

indicheranno simboli generici di un alfabeto.

Page 22: Introduzione a Linguaggi formali e compilazione

LFC

Nozioni introduttiveInformazioni generali

Parsing, traduzione ecompilazione

Alfabeti, stringhe elinguaggi

Stringhe

I Una stringa, su un dato alfabeto Σ, è una sequenzadi simboli (giustapposti) di Σ.

I 010110 e 1111 sono esempi di stringhe sull’alfabetobinario.

I AACGTCCTA è una stringa sull’alfabeto D.I Linguaggi formali e compilazione è una

stringa sull’alfabeto ASCII.I Conviene considerare anche la stringa vuota, cioè

una stringa composta da nessun carattere.I La stringa vuota è definita su qualsiasi alfabeto.

Page 23: Introduzione a Linguaggi formali e compilazione

LFC

Nozioni introduttiveInformazioni generali

Parsing, traduzione ecompilazione

Alfabeti, stringhe elinguaggi

Stringhe

I Per indicare stringhe generiche si utilizzeranno (aseconda dei casi) sia le ultime lettere dell’alfabetolatino (X ,Y ,Z ), in maiuscolo, sia le prime letteredell’alfabeto greco (α, β, γ), in minuscolo.

I La lettera ε verrà riservata per denotare la stringavuota.

I Una stringa formata da un solo carattere è unoggetto diverso dal carattere stesso.

I In tutti i casi nei quali possano sorgere ambiguità, adesempio nel caso di stringhe composte da un solocarattere, le stringhe verranno rinchiuse fra doppiapici.

I “0” è quindi un oggetto diverso da 0.

Page 24: Introduzione a Linguaggi formali e compilazione

LFC

Nozioni introduttiveInformazioni generali

Parsing, traduzione ecompilazione

Alfabeti, stringhe elinguaggi

Stringhe

I Il numero di caratteri che compongono una stringa Xè detto lunghezza di X .

I La lunghezza di una stringa X si indica spesso con|X | (si noti che consideriamo solo stringhe dilunghezza finita).

I Se |X | = n, i singoli caratteri della stringa verrannoindividuati da Xi , i = 1, . . . ,n.

I Date due stringhe X e Y , la stringa Z ottenutagiustapponendo i caratteri di Y a quelli di X è dettaconcatenazione di X e Y .

I Ad esempio se X = Linguaggi e Y = formali,risulta XY = Linguaggiformali.

I Se |X | = n e |Y | = m, risulta |XY | = n + m.

Page 25: Introduzione a Linguaggi formali e compilazione

LFC

Nozioni introduttiveInformazioni generali

Parsing, traduzione ecompilazione

Alfabeti, stringhe elinguaggi

Stringhe

I La concatenzione è associativa, ovvero

(XY )Z = X (YZ ).

I La concatenazione non è commutativa: postoX = mela e Y = verde, risultaXY = melaverde 6= verdemela = YX .

I La potenza k -esima di una stringa X , indicata conX k , è la stringa ottenuta concatenando X con se

stessa k ≥ 0 volte: X k =

k︷ ︸︸ ︷XX . . .X .

I Si pone poi X 0 = ε.I La riflessione di una stringa X = X1X2 . . .Xn è la

stringa X R = XnXn−1 . . .X0 ottenuta rovesciando icaratteri di X .

Page 26: Introduzione a Linguaggi formali e compilazione

LFC

Nozioni introduttiveInformazioni generali

Parsing, traduzione ecompilazione

Alfabeti, stringhe elinguaggi

Stringhe

I X è sottostringa di Y se esistono Z e W(eventualmente vuote) tali che: Y = ZXW .

I Se almeno una fra Z e W è diversa dalla stringavuota, allora X è sottostringa propria di Y .

I Se Z è vuota, X è un prefisso di Y .I Se W è vuota, X è un suffisso di Y .I La notazione Xi..j verrà utilizzata per indicare la

sottostringa di X formata dai caratteri dall’i-esimo alj-esimo.

Page 27: Introduzione a Linguaggi formali e compilazione

LFC

Nozioni introduttiveInformazioni generali

Parsing, traduzione ecompilazione

Alfabeti, stringhe elinguaggi

Esempi

I Se X = 01, risulta X 3 = 010101, seX = Linguaggi, alloraX 2 = LinguaggiLinguaggi

I Se X = Linguaggi formali e compilatori,allora

I Y = formali è una sottostringa propria di X ,I Z = Linguaggi è un prefisso di X ,I W = compilatori è un suffisso di X ,I X10..17 =“ formali”.I Si noti, nell’ultimo esempio, l’uso degli apici,

necessario per evitare le possibili ambiguità dovutealla presenza di un spazio ad inizio stringa.

I Se X = Roma, allora X R = amoR.

Page 28: Introduzione a Linguaggi formali e compilazione

LFC

Nozioni introduttiveInformazioni generali

Parsing, traduzione ecompilazione

Alfabeti, stringhe elinguaggi

Linguaggi

I Un linguaggio su un dato alfabeto Σ è un insieme distringhe su Σ.

I Un linguaggio può essere specificato in molti modi(ne vedremo almeno 4).

I Per enumerazione: consiste semplicementenell’elencare le stringhe che fanno parte dellinguaggio.

I Mediante regole della teoria degli insiemi: consistenel descrivere matematicamente come sono fatti glielementi dell’insieme (in questo caso le stringhe).

I Mediante un formalismo generativo.I Mediante algoritmi di riconoscimento.

I Gran parte di questo corso sarà dedicato allegrammatiche e agli automi riconoscitori, cherappresentano gli ultimi due modi di specifica.

Page 29: Introduzione a Linguaggi formali e compilazione

LFC

Nozioni introduttiveInformazioni generali

Parsing, traduzione ecompilazione

Alfabeti, stringhe elinguaggi

Esempi

I Dato Σ, l’insieme vuoto Φ e l’insieme di tutte lepossibili stringhe su Σ (denotato da Σ∗) sonolinguaggi che rivestiranno particolare importanza.

I I seguenti sono esempi di linguaggi definiti su B:I L1 = {00,01,10,11};I L2 = {ε,0,1,00,01,10,11,000,001,

010,011,100,101,110,111};I L3 = {00,010,0110,01110, . . .};I L4 = {0,1,00,11,000,010,101,111, . . .}.

I Gli stessi linguaggi, sopra definiti per enumerazione,possono essere specificati in modo più sinteticomediante il “linguaggio” della teoria degli insiemi:

I L1 = {X ∈ B∗ : |X | = 2};I L2 = {X ∈ B∗ : |X | ≤ 3};I L3 = {X ∈ B∗ : ∃k ≥ 0 t.c.X = 01k 0};I L4 = {X ∈ B∗ : X = X R}.

Page 30: Introduzione a Linguaggi formali e compilazione

LFC

Nozioni introduttiveInformazioni generali

Parsing, traduzione ecompilazione

Alfabeti, stringhe elinguaggi

Esempi

I L1 ed L2 sono esempi di linguaggi finiti, mentre L3 edL4 sono linguaggi infiniti.

I Naturalmente i linguaggi infiniti rivestono maggiorinteresse sia dal punto di vista teorico sia da quelloapplicativo.

I Vediamo ora alcuni linguaggi sull’alfabetoΣ = {a,b, c} che ci saranno utili nel seguito:

I L5 = {X ∈ Σ∗ : X = anbm,n,m ≥ 0};I L6 = {X ∈ Σ∗ : X = anbn,n ≥ 0};I L7 = {X ∈ Σ∗ : X = bncn,n ≥ 0};I L8 = {X ∈ Σ∗ : X = anbncm,n,m ≥ 0};I L9 = {X ∈ Σ∗ : X = anbmcm,n,m ≥ 0}.

Page 31: Introduzione a Linguaggi formali e compilazione

LFC

Nozioni introduttiveInformazioni generali

Parsing, traduzione ecompilazione

Alfabeti, stringhe elinguaggi

Operazioni con i linguaggi

I Innanzitutto, poiché i linguaggi sono insiemi (distringhe), sono definite su di essi tutte le operazioniinsiemistiche: unione, intersezione, differenza, ecc.

I Si definisce concatenamento (o concatenazione) didue linguaggi L′ ed L′′, definiti su un alfabeto Σ, illinguaggio L = L′L′′ le cui stringhe sono ilconcatenamento di una stringa di L′ e una di L′′:

L = {X ∈ Σ∗ : ∃Y ∈ L′,∃Z ∈ L′′ t.c.X = YZ}

I La seguente ricorrenza permette di definire, per ognim ≥ 0, la potenza n-esima di un linguaggio L:

L0 = {ε}Ln = Ln−1L, n > 0.

Page 32: Introduzione a Linguaggi formali e compilazione

LFC

Nozioni introduttiveInformazioni generali

Parsing, traduzione ecompilazione

Alfabeti, stringhe elinguaggi

Operazioni con i linguaggi

I La chiusura (riflessiva) di L è il linguaggio

L∗ =∞⋃

n=0

Ln = L0 ∪ L1 ∪ L2 ∪ . . .

I Inciso: è ora chiaro perché l’insieme di tutte lepossibili stringhe su un alfabeto Σ viene indicato conΣ∗. Per ogni intero i , Σ∗ contiene infatti tutte lestringhe di lunghezza i costituite dallaconcatenazione di caratteri di Σ; tale insiemecoincide proprio con l’insieme di tutte le possibilistringhe su Σ.

Page 33: Introduzione a Linguaggi formali e compilazione

LFC

Nozioni introduttiveInformazioni generali

Parsing, traduzione ecompilazione

Alfabeti, stringhe elinguaggi

Operazioni con i linguaggi

I La chiusura (non riflessiva) di L è definita comeL+ = LL∗, ovvero:

L+ =∞⋃

n=1

Ln = L1 ∪ L2 ∪ . . .

I La riflessione di un linguaggio L su un alfabeto Σ è illinguaggio:

LR = {X ∈ Σ∗ : ∃Y ∈ L t.c.X = Y R}.

I Il numero di stringhe di un linguaggio finito verràindicato con la notazione |L|. Se L è infinito risulta|L| = N, con ciò intendendo che L ha la stessacardinalità dell’insieme dei numeri naturali.

Page 34: Introduzione a Linguaggi formali e compilazione

LFC

Nozioni introduttiveInformazioni generali

Parsing, traduzione ecompilazione

Alfabeti, stringhe elinguaggi

Esempi

I L5\L6 = {X ∈ Σ∗ : X = anbm,n,m ≥ 0,n 6= m}I L5 ∪ L6 = L5

I L5 ∩ L6 = L6

I L6{c}∗ = L8

I L6L7 = {X ∈ Σ∗ : X = anbmck ,n, k ≥ 0,m = n + k}I L{ε} = {ε}L = LI |L1| = 4, |L2| = 15, |L5| = |L6| = |L7| = |L8| = N

Page 35: Introduzione a Linguaggi formali e compilazione

LFC

Nozioni introduttiveInformazioni generali

Parsing, traduzione ecompilazione

Alfabeti, stringhe elinguaggi

Esempi

I {ab, c}2 = {abab,abc, cab, cc}I {ab, c}3 = {ababab,abcab, cabab, ccab,

ababc,abcc, cabc, ccc}I {ab, c}∗ = {ε,ab, c,abab,abc, cab, cc,ababab,

abcab, cabab, ccab,ababc,abcc, cabc, ccc, . . .}I {ab, c}+ = {ab, c}∗\{ε}I({ab, c}2

)R= {baba, cba,bac, cc}