Traduzione guidata dalla sintassi
|
|
|
- Mauro Pippi
- 8 anni fa
- Visualizzazioni
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
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
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
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
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
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,
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,
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]
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:
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,
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)
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
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
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=
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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])
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
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
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
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
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
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.
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
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
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
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
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
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
«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]
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
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
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
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
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
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
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])
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
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
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
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
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
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
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.
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
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
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
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 =
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
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
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
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
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
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)
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.
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
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
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
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)
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
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
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
