Traduzione guidata dalla sintassi

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Traduzione guidata dalla sintassi"

Transcript

1 Traduzione guidata dalla sintassi Attributi e definizioni guidate dalla sintassi Dipartimento di Matematica e Informatica [email protected]

2 Analisi Semantica Analisi sintattica - output: il flusso di token (fase di analisi lessicale) viene raggruppato in frasi grammaticali rappresentate tramite alberi di derivazione di una CFG Questo tipo di rappresentazione intermedia consente di identificare operatori ed operandi delle espressioni e statements Costituisce l input della fase di analisi semantica: verifica dell esistenza di eventuali errori semantici acquisizione di informazioni sui tipi utilizzate nelle fasi successive del processo di compilazione type checking Problema: come possiamo definire la semantica ai costrutti dei linguaggi di programmazione?

3 Un semplice esempio Consideriamo la grammatica per le espressioni sui naturali: E E + T E T T T T F T /F F F (E) number Definire la semantica di questo linguaggio significa definire il valore di ogni espressione costruita applicando le produzioni della grammatica

4 Un semplice esempio Consideriamo la grammatica per le espressioni sui naturali: E E + T E T T T T F T /F F F (E) number Definire la semantica di questo linguaggio significa definire il valore di ogni espressione costruita applicando le produzioni della grammatica Associamo ad ogni non terminale della grammatica (e quindi ad ogni nodo del albero di derivazione per una data stringa in input) un attributo val che rappresenta appunto il suo valore: E.val, T.val, F.val A questo punto non ci resta che associare a ciascuna produzione una regola, detta regola semantica, che dice come calcolare il valore di una espressione a partire da quello delle sue sottoespressioni

5 Un semplice esempio PRODUZIONI E E 1 + T E E 1 T E T T T 1 F T T 1 /F T F F (E) F num REGOLE SEMANTICHE E.val = E 1.val + T.val E.val = E 1.val T.val E.val = T.val T.val = T 1.val F.val T.val = T 1.val/F.val T.val = F.val F.val = E.val F.val = num.lexval

6 Albero di derivazione della stringa E E + T E * T F T F num F num num

7 Albero di derivazione (annotato) della stringa E.val =16 E.val =15 + T.val =1 E.val =3 * T.val =5 F.val =1 T.val =3 F.val =3 num F.val =5 num num

8 Valutazione delle regole Fornire le regole semantiche non è però sufficiente Bisogna anche fornire un ordine di valutazione: dobbiamo specificare quali regole applicare (e, soprattutto, in quale ordine) per calcolare il valore desiderato L ordine di valutazione può essere ricostruito a partire dall albero di derivazione per la stringa input, non è altro che un qualche schema di visita dell albero di derivazione

9 Obiettivi Vediamo, in breve, una tecnica che permette di effettuare analisi semantica e traduzione usando la struttura sintattica data dalla grammatica di un linguaggio L idea di base è quella di associare ad ogni costrutto del nostro linguaggio delle informazioni utili allo scopo Queste informazioni utili vengono rappresentate mediante degli attributi associati a simboli (terminali e non) della grammatica Il valore di ciascun attributo è calcolato tramite delle regole semantiche associate alle produzioni della grammatica È anche indispensabile determinare il giusto ordine di valutazione (grafo delle dipendenze e ordinamento topologico)

10 (SDD) Sono generalizzazioni delle grammatiche context-free in cui ad ogni simbolo della grammatica è associato un insieme di attributi Se pensiamo ad ogni nodo del parse tree come ad una struttura (un record, un oggetto), allora gli attributi per un simbolo grammaticale X sono i campi della struttura che rappresenta il nodo X Scriveremo X.b per indicare il fatto che b è un attributo di X Un attributo può rappresentare qualsiasi cosa: stringhe (anche frammenti di codice), numeri, tipi, locazioni di memoria, entry di tabelle, etc. Il valore di ogni attributo ad ogni nodo è calcolato applicando la regola semantica associata alla produzione che si usa nel nodo

11 Attributi Sintetizzati ed Ereditati Attributi Sintetizzati: il loro valore in un dato nodo N può essere calcolato a partire dai valori degli attributi dei nodi figli di N Se A XYZ è una produzione di una SDD e b è un attributo sintetizzato per il non terminale A, il valore di b può dipendere solo dal valore di attributi dei simboli X, Y e Z Esempio: PRODUZIONI E E 1 + T E E 1 T E T T T 1 F REGOLE SEMANTICHE E.val = E 1.val + T.val E.val = E 1.val T.val E.val = T.val T.val = T 1.val F.val

12 Attributi Sintetizzati ed Ereditati Attributi Ereditati: il loro valore in un dato nodo N può essere calcolato a partire dai valori degli attributi dei nodi fratelli e del nodo padre di N Se A XYZ è una produzione di una SDD e b è un attributo ereditato del simbolo Y, il valore di b dipende dal valore di attributi dei simboli A (padre), X e Z (fratelli) Un terminale può avere solo attributi ereditati tipicamente restituiti dall analizzatore lessicale (valori lessicali) Esempio: PRODUZIONI F num REGOLE SEMANTICHE F.val = num.lexval

13 Formalmente... Una definizione guidata dalla sintassi è una grammatica libera da contesto in cui associamo ad ogni produzione A α un insieme di regole semantiche della forma b ::= f (c 1, c 2,..., c k ) dove f è una funzione arbitraria (di solito espressa con delle espressioni) e b, c 1, c 2,..., c k sono degli attributi Se b è un attributo sintetizzato di A allora c 1, c 2,..., c k sono attributi dei simboli in α (figli di A) Se b è un attributo ereditato di un di simbolo di α allora c 1, c 2,..., c k sono attributi di simboli di α oppure di A (fratelli e padre di A) In ogni caso l attributo b dipende dagli attributi c 1, c 2,..., c k

14 Una SDD per un semplice desk calculator PRODUZIONI L En E E 1 + T E T T T 1 F T F F (E) F digit REGOLE SEMANTICHE print(e.val) E.val = E 1.val T.val E.val = T.val T.val = T 1.val F.val T.val = F.val F.val = E.val F.val = digit.lexval Ha solo attributi sintetizzati, è una definizione S-attributed

15 Una SDD per un semplice desk calculator La grammatica genera le espressioni aritmetiche tra cifre seguite dal newline (n) Ogni non terminale ha un attributo sintetizzato val Il terminale num ha un attributo sintetizzato lexval il cui valore è fornito dall analizzatore lessicale (è il valore della particolare sequenza di caratteri che corrisponde al token num) La regola associata al simbolo iniziale L è una chiamata di procedura che stampa un valore intero (side-effect) mentre tutte le altre regole servono per il calcolo del valore degli attributi Assunzioni e convenzioni: L uso di non terminali con pedici (es, E 1 e T 1) serve per distinguere due diverse occorrenze dello stesso non terminale in una data produzione

16 Una SDD per delle semplici dichiarazioni di tipo PRODUZIONI D T L T int T real L L 1, id L id REGOLE SEMANTICHE L.inh := T.type T.type = int T.type = real L 1.inh = L.inh addtype(id.entry, L.inh) addtype(id.entry, L.inh)

17 Una SDD per delle semplici dichiarazioni di tipo Gli attributi ereditati vengono usati per distribuire informazioni sul tipo degli identificatori in una dichiarazione Una dichiarazione è costituita (in molti linguaggi di programmazione come C, Java,... ) da un identificare di tipo T seguito da una lista L di identificatori type è un attributo sintetizzato di T, mentre inh è un attributo ereditato per L Inizialmente il valore dell attributo type viene passato all attributo inh di L (mediante la regola L.type := T.type) Durante la costruzione della lista, ogni elemento passa al successivo il valore di inh (mediante la regola L 1.inh = L.inh) La procedura addtype, prende in input l entrata nella tabella dei simboli per un qualche identificare (id.entry) ed un tipo (L.inh) ed aggiunge al record dell identificare informazioni riguardanti il tipo

18 Le regole semantiche inducono delle dipendenze tra il valore degli attributi rappresentate mediante i cosidetti grafi delle dipendenze La valutazione, nel giusto ordine, delle regole semantiche determina il valore di tutti gli attributi dei nodi del parse tree di una stringa data La valutazione può avere anche side-effects (effetti collaterali) come la stampa di valori o l aggiornamento di una variabile globale Un parse tree che mostri i valori degli attributi ad ogni nodo è detto parse tree annotato Il processo di calcolo di questi valori prende il nome di annotazione o decorazione del parse tree

19 Grafo delle dipendenze Input: parse tree per una data stringa Ha un nodo per ogni attributo di ogni nodo n del parse tree Gli archi tengono conto delle dipendenze tra gli attributi indotte dalle regole semantiche Es: Sia A X Y una produzione con regola semantica associata A.a := f (X.x, Y.y) A a X x y Y

20 Grafo delle dipendenze Input: parse tree per una data stringa Ha un nodo per ogni attributo di ogni nodo n del parse tree Gli archi tengono conto delle dipendenze tra gli attributi indotte dalle regole semantiche Es: Sia A X Y una produzione con regola semantica associata X.x := g(a.a, Y.y) A a X x y Y

21 Grafo delle dipendenze: un esempio D T inh type L 1 inh L int 2 entry id 1 inh L 3 id entry 2 id 3 entry

22 Un algoritmo per la costruzione del grafo delle dipendenze for each nodo n nel parse tree do for each attributo a del nodo n do costruisci un nodo per a nel grafo; for each nodo n nel parse tree do for each regola semantica b := f (c 1, c 2,..., c k ) associata con una produzione usata in n do for i := 1 to k do aggiungi un arco dal nodo per c i al nodo per b Attenzione: per le chiamate di procedure (Es: addtype(id.entry, L.type)) aggiungiamo un nodo (e, quindi, un attributo) fittizio

23 D T 4 inh type 5 L 1 int inh 7 inh 6 L 3 2 id entry 1 L 2 3 id 8 entry id 3 1 entry

24 Un ordinamento topologico di un grafo diretto aciclico è un qualsiasi ordinamento dei nodi n 1 n 2... n k tale che se esiste un arco nel grafo dal nodo n i al nodo n j (se la coppia (n i, n j ) A) allora n i precedete n j nell ordinamento (n i n j ) ogni coppia i, j Un qualsiasi ordinamento topologico del grafo delle dipendenze dà un ordine valido in cui le regole semantiche possono essere valutate Nell ordinamento topologico i valori degli attributi c 1, c 2,..., c k di una regola b := f (c 1, c 2,..., c k ) sono disponibili sempre prima che f sia valutata

25 La traduzione specificata da una qualsiasi definizione guidata dalla sintassi può essere sempre e comunque implementata nel seguente modo: 1 si costruisce il parse tree 2 si costruisce il grafo delle dipendenze 3 si trova un ordinamento topologico del grafo 4 si valutano le regole semantiche dei nodi secondo l ordinamento topologico

26 Consideriamo, di nuovo, la valutazione di int d 1, d 2, d 3. Abbiamo: (1) costruito il parse tree dalla stringa, (2) costruito il grafo delle dipendenze e (3) identificato un ordinamento topologico del grafo. Ora valutiamo le regole in base all ordinamento, ottenendo il seguente frammento di codice: T.type := int; L 1.inh := T.type; L 2.inh := L 1.inh; L 3.inh := L 2.inh; addtype(id 3.entry, L 3.inh); addtype(id 2.entry, L 2.inh); addtype(id 1.entry, L 1.inh);

27 Ordinamenti topologici e cicli La presenza di un ciclo in in grafo delle dipendenze rende impossibile definire un ordinamento topologico e, di conseguenza, uno schema di valutazione per le regole semantiche. Ad esempio, il seguente ciclo sta ad indicare che per calcolare il valore dell attributo a abbiamo bisogno del valore dell attributo b, che a sua volta dipende dal valore di a... a b

28 Una SDD che usa solo attributi sintetizzati è detta S-attributed Un parse tree di una defizione S-attributed può sempre essere annotato valutando le regole semantiche per gli attributi in maniera bottom-up (dalle foglie alla radice) In genere, basta una semplice visita in postordine del parse tree secondo il seguente schema (dove N è la radice del parse tree): postorder (N) for each (figlio C di N, da sinistra a destra) postorder(c) valuta gli attributi di N Possono quindi essere implementate facilmente durante il parsing LR Generatori automatici di LR-parser possono essere modificati per implementare una definizione S-attributed basata su una grammatica LR

29 Valutazione degli attributi in una definizione S-attributed Grafo delle dipendenze per 3 4n L 8 E 7 val n T 6 val T 3 val * F 5 val 2 4 F lexval digit lexval digit 1 lexval

30 Valutazione degli attributi in una definizione S-attributed Albero annotato per 3 4n L E.val=12 n T.val=12 T.val=3 * F.val=4 F.val=3 digit.lexval=4 digit.lexval=3

31 Definizioni L-Attributed È una sottoclasse di SDD per la quale riusciamo ad identificare un ordine di valutazione; impone dei vincoli sugli attributi In particolare ogni attributo deve essere: 1 sintettizzato oppure 2 ereditato, ma... se X i.a è un attributo ereditato il cui valore è calcolato tramite una regola associata alla produzione A X 1 X 2... X n, tale regola può usare (a) attributi ereditati di A (b) attributi (ereditati e sintetizzati) dei simboli X 1, X 2,..., X i 1 (c) attributi (ereditati e sintetizzati) di X i solo se in questo modo non si formano cicli nel grafo delle dipendenze (d) se X i è un terminale, la regola può anche dipendere da valori lessicali per X i

32 Una Definizione L-Attributed PRODUZIONI D T L T int T real L L 1, id L id REGOLE SEMANTICHE L.inh := T.type T.type = int T.type = real L 1.inh = L.inh addtype(id.entry, L.inh) addtype(id.entry, L.inh)

33 Una definizione non L-attributed e non S-attributed PRODUZIONI A B C REGOLE SEMANTICHE A.s = B.a B.i = f (C.b, A.s) s è un attributo sintetizzato di A (dipende da un attributo a di un nodi figlio) i è un attributo ereditato di B, ma tale attributo dipende da : un attributo sintetizzato (e non ereditato) di A un attributo di C, fratello destro (e non sinistro) di B

34 Syntax Tree Vediamo ora come sia possibile usare le definizioni guidate dalla sintassi per specificare (implementare) la costruzione di syntax tree per espressioni Abbiamo parlato di syntax tree all inizio del corso: un albero sintattico (astratto) è una forma condensata di un parse tree che è utile per rappresentare i costrutti dei linguaggi Operatori e le parole chiave non appaiono come foglie, ma sono associati a nodi interni; sulle foglie troviamo invece gli operandi Un altra semplificazione è che le catene di applicazione di una singola produzione vengono collassate

35 Costruzione di un Syntax Tree Problema: definire delle regole semantiche per le produzioni della seguente grammatica che producano in output il syntax-tree per la stringa in input E E 1 + T E E 1 T E T T (E) T num T id

36 Vediamo ora in dettaglio come costruire gli alberi sintattici per le espressioni aritmetiche; Costruiamo, inanzitutto, i sottoalberi per le sottoespressioni creando un nodo per ogni operatore ed operando I figli di un nodo operatore altro non sono che le radici dei sottoalberi che rappresentano le sottoespressioni che definiscono lespressione principale Ogni nodo di un syntree può essere implementato mediante un record con diversi campi

37 In un nodo operatore un campo identifica l operatore stesso e i campi rimanenti son i puntatori ai nodi operandi; l operatore è spesso detto etichetta del nodo I nodi in un syntree possono avere campi addizionali per gli attributi che sono stati definiti In un nodo operando un campo identifica l operando che può essere un identificatore o un numero I campi rimanenti possono rappresentare un entrata alla symbol table (nel caso in cui l operando sia un identificatore) o un valore (nel caso in cui l operando sia un numero)

38 Usiamo le seguenti funzioni per costruire i nodi dei syntree per espressioni con operatori binari: 1 mknode(op, left, right) crea un nodo operatore con etichetta op e due campi puntatore all operando destro e sinistro 2 mkleaf (id, entry) crea un nodo identificatore con etichetta id ed un puntatore entry alla tabella dei simboli 3 mkleaf (num, val) crea un nodo numero con etichetta num e un campo val contentente il valore

39 Il seguente frammento di programma crea (in maniera bottom-up) un syntax tree per lespressione a 4 + c 1. p 1 = mkleaf (id, entry a ); 2. p 2 = mkleaf (num, 4); 3. p 3 = mknode(, p 1, p 2 ); 4. p 4 = mkleaf (id, entry c ); 5. p 3 = mknode( +, p 3, p 5 );

40 SDD per i Syntax Trees Diamo una definizione guidata dalla sintassi S-attributed per la costruzione dell albero sintattico di una espressione contenente gli operatori + e - Introduciamo un attributo nptr per ogni simbolo non terminale per tener traccia dei puntatori ritornati dalle funzioni di creazione dei nodi Produzioni E E 1 + T E E 1 T E T T (E) T id T num Regole Semantiche E.nptr := mknode( +, E 1.nptr, T.nptr) E.nptr := mknode(, E 1.nptr, T.nptr) E.nptr := T.nptr T.nptr := E.nptr E.nptr := mkleaf(id, id.entry) E.nptr := mkleaf(num, num.val)

41 Albero annotato

Fasi di un Compilatore

Fasi di un Compilatore Dipartimento di Matematica e Informatica Università di Camerino Un implementazione compilativa di un linguaggio di programmazione viene realizzata tramite un programma che prende il nome di compilatore

Dettagli

Linguaggi e Ambienti di Programmazione

Linguaggi e Ambienti di Programmazione Linguaggi e Ambienti di Programmazione Principi e tecniche diffuse che si incontrano spesso nelle applicazioni dell informatica. Compilatori Editor di struttura: riceve in input una sequenza di comandi

Dettagli

Semantica e traduzione guidata dalla sintassi

Semantica e traduzione guidata dalla sintassi Corso di Laurea Magistrale in Ingegneria Informatica A.A. 2011-2012 Linguaggi Formali e Compilatori Semantica e traduzione guidata dalla sintassi Giacomo PISCITELLI Compile-time semantic evaluation Finora

Dettagli

Grammatiche. Grammatiche libere da contesto Grammatiche regolari Potenza delle grammatiche libere e regolari Struttura di frase: Alberi di derivazione

Grammatiche. Grammatiche libere da contesto Grammatiche regolari Potenza delle grammatiche libere e regolari Struttura di frase: Alberi di derivazione Grammatiche Grammatiche libere da contesto Grammatiche regolari Potenza delle grammatiche libere e regolari Struttura di frase: Alberi di derivazione Esempio dei numeri interi Si consideri il linguaggio

Dettagli

Analizzatore lessicale o scanner. Lo scanner rappresenta un'interfaccia fra il programma sorgente e l'analizzatore sintattico o parser.

Analizzatore lessicale o scanner. Lo scanner rappresenta un'interfaccia fra il programma sorgente e l'analizzatore sintattico o parser. Analizzatore lessicale o scanner Dispensa del corso di Linguaggi e Traduttori A.A. 2005-2006 Lo scanner rappresenta un'interfaccia fra il programma sorgente e l'analizzatore sintattico o parser. Lo scanner,

Dettagli

Alberi ed Alberi Binari

Alberi ed Alberi Binari Alberi ed Alberi Binari Il tipo di dato Albero Un albero è una struttura di data organizzata gerarchicamente. È costituito da un insieme di nodi collegati tra di loro: ogni nodo contiene dell informazione,

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2006/07 Il concetto di dato Il concetto di tipo di dato Insertion Sort for j 2 to lenght[a]

Dettagli

Espressioni aritmetiche

Espressioni aritmetiche Espressioni aritmetiche Consideriamo espressioni costruite a partire da variabili e costanti intere mediante applicazione delle operazioni di somma, sottrazione, prodotto e divisione (intera). Ad esempio:

Dettagli

Grammatiche Parse trees Lezione del 17/10/2012

Grammatiche Parse trees Lezione del 17/10/2012 Fondamenti di Programmazione A.A. 2012-2013 Grammatiche Parse trees Lezione del 17/10/2012 AUTILI MARCO http://www.di.univaq.it/marco.autili/ Riassunto lezione precedente Sintassi vs Semantica Stringhe,

Dettagli

Dispensa 2. Data una grammatica context free esistono tre metodi diversi per costruirne la parsing table per un parser LR:

Dispensa 2. Data una grammatica context free esistono tre metodi diversi per costruirne la parsing table per un parser LR: Dispensa 2 2.1 Costruzione Parsing Table LR: generalità Come tutti i parser tabellari predittivi, anche i parser LR possono essere applicati solo a parsing table senza conflitti (ossia entrate multiple)

Dettagli

Automi e Linguaggi Formali

Automi e Linguaggi Formali E-mail: [email protected] rario e ricevimento Orario: Lunedi, Martedi, Mercoledi, Giovedi 13:30-15:30 LUM250 Crediti: 8 crediti formativi, circa 64 ore di lezione Ricevimento: Martedi 11:00-13:00, studio

Dettagli

Alberi e alberi binari I Un albero è un caso particolare di grafo

Alberi e alberi binari I Un albero è un caso particolare di grafo Alberi e alberi binari Un albero è un caso particolare di grafo È costituito da un insieme di nodi collegati tra di loro mediante archi Gli archi sono orientati (ogni arco esce da un nodo origine ed entra

Dettagli

Pumping lemma per i linguaggi Context-free

Pumping lemma per i linguaggi Context-free Pumping lemma per i linguaggi Context-free Sia L un linguaggio context-free. E possibile determinare una costante k, dipendente da L, tale che qualunque stringa z! L con z > k si può esprimere come z=

Dettagli

Yet Another Compiler-Compiler. Generazione automatica di analizzatori sintattici

Yet Another Compiler-Compiler. Generazione automatica di analizzatori sintattici Yet Another Compiler-Compiler Generazione automatica di analizzatori sintattici 2 YACC Yet Another Compiler-Compiler YACC (Bison) è un generatore di analizzatori sintattici a partire dalla descrizione

Dettagli

Problemi, istanze, soluzioni

Problemi, istanze, soluzioni lgoritmi e Strutture di Dati II 2 Problemi, istanze, soluzioni Un problema specifica una relazione matematica tra dati di ingresso e dati di uscita. Una istanza di un problema è formata dai dati di un

Dettagli

Espressività e limitazioni delle grammatiche regolari

Espressività e limitazioni delle grammatiche regolari Espressività e limitazioni delle grammatiche regolari Vantaggi: Le grammatiche regolari consentono di esprimere una significativa classe di linguaggi: linguaggi con un numero di sequenze infinito grazie

Dettagli

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni [email protected] Programmazione prof. Domenico

Dettagli

Alberi binari e alberi binari di ricerca

Alberi binari e alberi binari di ricerca Alberi binari e alberi binari di ricerca Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica

Dettagli

Linguaggi di programmazione - Principi e paradigmi 2/ed Maurizio Gabbrielli, Simone Martini Copyright The McGraw-Hill Companies srl

Linguaggi di programmazione - Principi e paradigmi 2/ed Maurizio Gabbrielli, Simone Martini Copyright The McGraw-Hill Companies srl Approfondimento 2.1 Non è questo il testo dove trattare esaurientemente queste tecniche semantiche. Ci accontenteremo di dare un semplice esempio delle tecniche basate sui sistemi di transizione per dare

Dettagli

Fondamenti d Informatica: linguaggi formali. Barbara Re, Phd

Fondamenti d Informatica: linguaggi formali. Barbara Re, Phd Fondamenti d Informatica: linguaggi formali Barbara Re, Phd Agenda } Introdurremo } La nozione di linguaggio } Strumenti per definire un linguaggio } Espressioni Regolari 2 Linguaggio } Da un punto di

Dettagli

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I Lezione 4 Elementi lessicali e espressioni logiche Matricole 2-3 Elementi lessicali il linguaggio C ha un suo vocabolario di base i cui elementi sono detti token esistono 6 tipi di token: parole chiave

Dettagli

AUTOMA A STATI FINITI

AUTOMA A STATI FINITI Gli Automi Un Automa è un dispositivo, o un suo modello in forma di macchina sequenziale, creato per eseguire un particolare compito, che può trovarsi in diverse configurazioni più o meno complesse caratterizzate

Dettagli

Costanti e Variabili

Costanti e Variabili Parte 3 Costanti e Variabili Identificatori Un identificatore è un nome che viene associato a diverse entità (costanti, tipi, variabili, funzioni, ecc.) e serve ad identificare la particolare entità Gli

Dettagli

Laboratorio di Algoritmi e Strutture Dati. Code con Priorità

Laboratorio di Algoritmi e Strutture Dati. Code con Priorità Laboratorio di Algoritmi e Strutture Dati Code con Priorità Teresa M.A. Basile [email protected] Dipartimento di Informatica Università degli Studi di Bari Aldo Moro Materiale di base gentilmente concesso

Dettagli

Note per la Lezione 4 Ugo Vaccaro

Note per la Lezione 4 Ugo Vaccaro Progettazione di Algoritmi Anno Accademico 2016 2017 Note per la Lezione 4 Ugo Vaccaro Ripasso di nozioni su Alberi Ricordiamo che gli alberi rappresentano una generalizzazione delle liste, nel senso che

Dettagli

Il Modello di un Compilatore. La costruzione di un compilatore per un particolare linguaggio di programmazione e' abbastanza complessa.

Il Modello di un Compilatore. La costruzione di un compilatore per un particolare linguaggio di programmazione e' abbastanza complessa. Il Modello di un Compilatore La costruzione di un compilatore per un particolare linguaggio di programmazione e' abbastanza complessa. La complessità dipende dal linguaggio sorgente. Compilatore: traduce

Dettagli

GRAFI. Cosa sono Grafi non orientati Grafi orientati Grafi pesati Alberi Automi!

GRAFI. Cosa sono Grafi non orientati Grafi orientati Grafi pesati Alberi Automi! G R A F I 1 GRAFI Cosa sono Grafi non orientati Grafi orientati Grafi pesati Alberi Automi! 2 cip: cip: Pallogrammi Pallogrammi GRAFI: cosa sono I grafi sono una struttura matematica fondamentale: servono

Dettagli

Heap e code di priorità

Heap e code di priorità Heap e code di priorità Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010

Dettagli

Cos è un algoritmo. Si dice algoritmo la descrizione di un metodo di soluzione di un problema che sia

Cos è un algoritmo. Si dice algoritmo la descrizione di un metodo di soluzione di un problema che sia Programmazione Un programma descrive al computer, in estremo dettaglio, la sequenza di passi necessari a svolgere un particolare compito L attività di progettare e realizzare un programma è detta programmazione

Dettagli

Appunti del corso di Informatica 1 (IN110 Fondamenti) 7 Grafi e alberi: introduzione

Appunti del corso di Informatica 1 (IN110 Fondamenti) 7 Grafi e alberi: introduzione Università di Roma Tre Dipartimento di Matematica e Fisica Corso di Laurea in Matematica Appunti del corso di Informatica (IN0 Fondamenti) Grafi e alberi: introduzione Marco Liverani ([email protected])

Dettagli

Introduzione alla programmazione

Introduzione alla programmazione Introduzione alla programmazione Risolvere un problema Per risolvere un problema si procede innanzitutto all individuazione Delle informazioni, dei dati noti Dei risultati desiderati Il secondo passo consiste

Dettagli

Funzioni, Stack e Visibilità delle Variabili in C

Funzioni, Stack e Visibilità delle Variabili in C Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7

Dettagli

Cosa si intende con stato

Cosa si intende con stato Il concetto di stato Cosa si intende con stato I una particolare configurazione delle informazioni di una macchina, che in qualche modo memorizza le condizioni in cui si trova, e che cambia nel tempo passando

Dettagli

INDICI PER FILE. Accesso secondario. Strutture ausiliarie di accesso

INDICI PER FILE. Accesso secondario. Strutture ausiliarie di accesso INDICI PER FILE Strutture ausiliarie di accesso 2 Accesso secondario Diamo per scontato che esista già un file con una certa organizzazione primaria con dati non ordinati, ordinati o organizzati secondo

Dettagli

Linguaggi e Grammatiche Liberi da Contesto

Linguaggi e Grammatiche Liberi da Contesto N.Fanizzi-V.Carofiglio Dipartimento di Informatica Università degli Studi di Bari 22 aprile 2016 1 Linguaggi Liberi da Contesto 2 Grammatiche e Linguaggi Liberi da Contesto G = (X, V, S, P) è una grammatica

Dettagli

Espressioni regolari

Espressioni regolari spressioni Regolari Un FA (NFA o DFA) e una macchina a stati finiti che riconosce linguaggi regolari. Una espressione regolare e un modo dichiarativo (o algebrico) per descrivere un linguaggio regolare.

Dettagli

Algoritmi e Strutture Dati. HeapSort

Algoritmi e Strutture Dati. HeapSort Algoritmi e Strutture Dati HeapSort Selection Sort: intuizioni L algoritmo Selection-Sort scandisce tutti gli elementi dell array a partire dall ultimo elemento fino all inizio e ad ogni iterazione: Viene

Dettagli

Grammatiche context-free

Grammatiche context-free Corso di Laurea Magistrale in Ingegneria Informatica A.A. 2013-2014 Linguaggi Formali e Compilatori Grammatiche context-free Giacomo PISCITELLI Politecnico di Bari G. Piscitelli pag. 1 di 28 Grammatiche

Dettagli

Definire tramite una grammatica ad attributi il

Definire tramite una grammatica ad attributi il 1 ESERCIZI ESERCIZIO 1 Definire tramite una grammatica ad attributi il linguaggio L = {a n b n c n n 0} Implementare un analizzatore sintattico/ semantico a discesa ricorsiva Costruire le tabelle di analisi

Dettagli

Il tipo astratto coda con priorità: specifiche sintattiche e semantiche. Realizzazioni.

Il tipo astratto coda con priorità: specifiche sintattiche e semantiche. Realizzazioni. Il tipo astratto coda con priorità: specifiche sintattiche e semantiche. Realizzazioni. Algoritmi e Strutture Dati + Lab A.A. 14/15 Informatica Università degli Studi di Bari Aldo Moro Nicola Di Mauro

Dettagli

I Linguaggi di Programmazione

I Linguaggi di Programmazione I Linguaggi di Programmazione 1 Linguaggio naturale e linguaggio macchina La comunicazione uomo-macchina avviene attraverso formalismi che assumono la forma di un linguaggio. Caratteristiche del Linguaggio

Dettagli

PROLOG E ANALISI SINTATTICA DEI LINGUAGGI Quando si vuole definire in modo preciso la sintassi di un linguaggio si ricorre a una grammatica G=(V n,v t

PROLOG E ANALISI SINTATTICA DEI LINGUAGGI Quando si vuole definire in modo preciso la sintassi di un linguaggio si ricorre a una grammatica G=(V n,v t PROLOG E ANALISI SINTATTICA DEI LINGUAGGI Quando si vuole definire in modo preciso la sintassi di un linguaggio si ricorre a una grammatica Una grammatica permette di stabilire se una sequenza di simboli

Dettagli

«Sciente e Tecnologie dei Beni Culturali»

«Sciente e Tecnologie dei Beni Culturali» 5 Informatica CdS in «Sciente e Tecnologie dei Beni Culturali» AA 2014-2015 Mini-sito dell insegnamento: http://www.unife.it/scienze/beni.culturali/insegnamenti/informatica Prof. Giorgio Poletti [email protected]

Dettagli

Linguaggi di Programmazione Corso C. Parte n.3 Linguaggi Liberi da Contesto e Linguaggi Contestuali. Nicola Fanizzi

Linguaggi di Programmazione Corso C. Parte n.3 Linguaggi Liberi da Contesto e Linguaggi Contestuali. Nicola Fanizzi Linguaggi di Programmazione Corso C Parte n.3 Linguaggi Liberi da Contesto e Linguaggi Contestuali Nicola Fanizzi ([email protected]) Dipartimento di Informatica Università degli Studi di Bari Grammatiche

Dettagli

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione

Dettagli

Sviluppo di programmi

Sviluppo di programmi Sviluppo di programmi Per la costruzione di un programma conviene: 1. condurre un analisi del problema da risolvere 2. elaborare un algoritmo della soluzione rappresentato in un linguaggio adatto alla

Dettagli

Linguaggi di Programmazione

Linguaggi di Programmazione Linguaggi di Programmazione 1 Linguaggio naturale e linguaggio macchina La comunicazione uomo-macchina avviene attraverso formalismi che assumono la forma di un linguaggio. Caratteristiche del Linguaggio

Dettagli

Linguaggi, Traduttori e le Basi della Programmazione

Linguaggi, Traduttori e le Basi della Programmazione Corso di Laurea in Ingegneria Civile Politecnico di Bari Sede di Foggia Fondamenti di Informatica Anno Accademico 2011/2012 docente: Prof. Ing. Michele Salvemini Sommario Il Linguaggio I Linguaggi di Linguaggi

Dettagli

Alberi. Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo. Fosco.

Alberi. Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo. Fosco. Alberi Alberi Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo Fosco Dora Drogo Frodo Dudo Daisy Alberi Gli alberi sono una generalizzazione

Dettagli

Il linguaggio di programmazione Python

Il linguaggio di programmazione Python Università Roma Tre Dipartimento di Matematica e Fisica Percorso Abilitante Speciale Classe A048 Matematica Applicata Corso di Informatica Il linguaggio di programmazione Python Marco Liverani ([email protected])

Dettagli

Programmazione in Java (I modulo)

Programmazione in Java (I modulo) Programmazione in Java (I modulo) Lezione 4 Variabili di tipo primitivo. Dichiarazione di costanti Conversioni di tipo: operatore cast Altri operatori di assegnamento Operazioni aritmetiche e di confronto

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Heap Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2006/07 Heap Heap binari: definizione Un heap binario è una struttura dati composta

Dettagli

Verificare se una grammatica e LL(1) e costruirne la tabella di parsing. Verificare se una grammatica e LR(0) e costruirne la tabele ACTION e GOTO

Verificare se una grammatica e LL(1) e costruirne la tabella di parsing. Verificare se una grammatica e LR(0) e costruirne la tabele ACTION e GOTO ANALISI SINTATTICA TIPO 1: Data un linguaggio scrivere una grammatica che lo generi TIPO 2: Verificare se una grammatica non contestuale è ambigua TiPO 3: Verificare se una grammatica e LL(1) e costruirne

Dettagli

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo Programmazione Orientata agli Oggetti Emilio Di Giacomo e Walter Didimo Una metafora dal mondo reale la fabbrica di giocattoli progettisti Un semplice giocattolo Impara i suoni Dall idea al progetto Toy

Dettagli

Cammini minimi in grafi:

Cammini minimi in grafi: Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Cammini minimi in grafi: una trilogia Cammini minimi in grafi: Episodio III: la fine della trilogia Input: nelle puntate

Dettagli

Esercizi su alberi binari

Esercizi su alberi binari Esercizi su alberi binari Esercizi svolti: Determinazione nodi contenti verifica completezza verifica quasi completezza lunghezza del cammino interno determinazione ultima foglia in un quasi completo verifica

Dettagli

Introduction. The Structure of a Compiler

Introduction. The Structure of a Compiler Introduction The Structure of a Compiler ISBN 978-88-386-6573-8 Text Books Maurizio Gabbrielli e Simone Martini sono professori ordinari di Informatica presso l'alma Mater Studiorum - Università di Bologna.

Dettagli

Dispensa YACC. 1.1 YACC: generalità

Dispensa YACC. 1.1 YACC: generalità Dispensa YACC 1.1 YACC: generalità Il tool Yacc (acronimo per Yet Another Compiler Compiler) è uno strumento software che a partire da una specifica grammaticale context free di un linguaggio scritta in

Dettagli

Dispensa 3. 1.1 YACC: generalità

Dispensa 3. 1.1 YACC: generalità Dispensa 3 1.1 YACC: generalità Il tool Yacc (acronimo per Yet Another Compiler Compiler) è uno strumento software che a partire da una specifica grammaticale context free di un linguaggio scritta in un

Dettagli

Dispensa 1. Da un punto di vista logico l architettura di un compilatore si può suddividere in due parti: Analisi e Sintesi.

Dispensa 1. Da un punto di vista logico l architettura di un compilatore si può suddividere in due parti: Analisi e Sintesi. Dispensa 1 1. Introduzione ai compilatori Compilatore Un compilatore è un programma che legge un programma scritto in un linguaggio (sorgente) e lo traduce in un programma equivalente in un altro linguaggio

Dettagli

Esercizi proposti 10

Esercizi proposti 10 Esercizi proposti 10 In questo gruppo di esercizi assumiamo, dove non sia specificato diversamente, di rappresentare i grafi mediante liste di archi, con il tipo di dati così dichiarato: type a graph =

Dettagli

Linguaggi Regolari e Linguaggi Liberi

Linguaggi Regolari e Linguaggi Liberi Linguaggi Regolari e Linguaggi Liberi Linguaggi regolari Potere espressivo degli automi Costruzione di una grammatica equivalente a un automa Grammatiche regolari Potere espressivo delle grammatiche 1

Dettagli

Logica proposizionale

Logica proposizionale Definire un linguaggio formale Logica proposizionale Sandro Zucchi 2013-14 Definiamo un linguaggio formale LP (che appartiene a una classe di linguaggi detti linguaggi della logica proposizionale) Per

Dettagli

Rappresentazione dell informazione

Rappresentazione dell informazione Rappresentazione dell informazione Problema che coinvolge aspetti filosofici Interessa soprattutto distinguere informazioni diverse Con un solo simbolo è impossibile Pertanto l insieme minimo è costituito

Dettagli

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 6 - Blocchi e cicli Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://pages.di.unipi.it/milazzo milazzo di.unipi.it

Dettagli

Definizione di metodi in Java

Definizione di metodi in Java Definizione di metodi in Java Un metodo in Java definisce un operazione ad alto livello (sottoprogramma) che consente di manipolare dati e oggetti. Durante la computazione effettuata da un programma, un

Dettagli

Esercitazione 6. Alberi binari di ricerca

Esercitazione 6. Alberi binari di ricerca Esercitazione 6 Alberi binari di ricerca Struttura base Rappresentabile attraverso una struttura dati concatenata in cui ogni nodo è un oggetto di tipo struttura Ogni nodo contiene: campo chiave (key)

Dettagli

Programmazione ad oggetti

Programmazione ad oggetti Programmazione ad oggetti OOP La programmazione orientata agli oggetti (Object Oriented Programming) ha l obiettivo di formalizzare gli oggetti del mondo reale e di costruire con questi un mondo virtuale.

Dettagli

Macchine sequenziali. Automa a Stati Finiti (ASF)

Macchine sequenziali. Automa a Stati Finiti (ASF) Corso di Calcolatori Elettronici I Macchine sequenziali Prof. Roberto Canonico Università degli Studi di Napoli Federico II Dipartimento di Ingegneria Elettrica e delle Tecnologie dell Informazione Corso

Dettagli

La codifica di sorgente

La codifica di sorgente Tecn_prog_sist_inform Gerboni Roberta è la rappresentazione efficiente dei dati generati da una sorgente discreta al fine poi di trasmetterli su di un opportuno canale privo di rumore. La codifica di canale

Dettagli

Definizione di classi. Walter Didimo

Definizione di classi. Walter Didimo Definizione di classi Walter Didimo Definizione di classi Fino ad ora abbiamo imparato a: creare oggetti da classi già pronte usare gli oggetti creati, invocando metodi la creazione e l uso di oggetti

Dettagli

Rappresentazioni numeriche

Rappresentazioni numeriche Rappresentazioni numeriche Un numero è dotato di un valore una rappresentazione La rappresentazione di un numero è il sistema che utilizziamo per indicarne il valore. Normalmente è una sequenza (stringa)

Dettagli

UD 3.2b: Programmazione in Pascal (1)

UD 3.2b: Programmazione in Pascal (1) UD 3.2b: Programmazione in Pascal (1) Il Linguaggio di Programmazione Pascal Esistono molti linguaggi di programmazione. Per motivi didattici utilizzeremo una versione ridotta di un linguaggio di programmazione

Dettagli

Analizzatore Lessicale Parte I Scanner

Analizzatore Lessicale Parte I Scanner Analizzatore Lessicale Parte I Scanner Sommario Dispensa di Linguaggi di Programmazione Corrado Mencar, Pasquale Lops In questa dispensa si descrive un approccio alla costruzione di un analizzatore lessicale

Dettagli

Il linguaggio C. Puntatori e Array

Il linguaggio C. Puntatori e Array Il linguaggio C Puntatori e Array Puntatori I puntatori sono variabili i cui valori sono indirizzi di locazioni in cui sono memorizzate altre variabili architettura a 32 bit: 232-1 indirizzi, ma non si

Dettagli