Traduttore diretto dalla sintassi (seconda parte) Giuseppe Morelli

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Traduttore diretto dalla sintassi (seconda parte) Giuseppe Morelli"

Transcript

1 Traduttore diretto dalla sintassi (seconda parte) Giuseppe Morelli

2 Traduzione di linguaggi guidata da Grammatiche Context Free La traduzione diretta della sintassi avviene associando regole e/o frammenti di codice alle produzioni di una grammatica 2 possibilità -> 2 concetti: Attributi: un attributo è una qualsiasi quantità associata ad un costrutto di programmazione (ad un simbolo della grammatica terminale o non terminale) Es. tipo di una variabile o di una espressione Schemi di traduzione: uno schema di traduzione definisce una notazione da seguire per associare ad una produzione un frammento di codice che sarà eseguito quando l analisi sintattica userà la relativa produzione

3 La combinazione dei risultati ottenuti dall esecuzione dei frammenti di codice nell ordine indotto dalla analisi sintattica, è la traduzione del programma iniziale. Useremo Traduttori diretti della sintassi per: Portare una espressione dalla notazione infissa alla post fissa Valutare espressioni Costruire alberi di parsing di costrutti di programmazione

4 Notazione Post Fissa Data una espressione E la sua notazione post fissa può essere definita come: 1. Se E è una variabile o un costante la sua notazione post fissa è E stessa 2. Se E è una espressione del tipo E1 op E2, con op operatore binario allora la sua notazione post fissa è E 1 E 2 op dove E 1 ed E 2 sono le notazioni post-fisse di E1 ed E2 rispettivamente. 3. Se E è una espressione del tipo (E1) allora la sua notazione post fissa è la stessa notazione di E1 La notazione post fissa non necessita di parentesi.

5 L arietà di un operatore e la notazione stessa permettono di interpretare una espressione in maniera univoca. Esempi: (9-5) (5+2) Per la corretta interpretazione: Guardare la stringa da sinistra fino a trovare il primo operatore: prendere un numero di operatori pari all arietà dell operatore, valutare l operazione e sostituire operatore ed operandi con il risultato. Ripetere il procedimento ricercando altri operatori.

6 Definizione diretta della sintassi Una SDD (Syntax-Directed Definition) è una grammatica context free arricchita di attributi e regole semantiche. Attributi sono associati ai simboli della grammatica Le regole semantiche sono associate alle produzioni e permettono di calcolare il valore degli attributi associati ai simboli che stanno nella produzione Se X è un simbolo della grammatica ed a è un suo attributo con X.a si indicherà il valore di a in un nodo specifico dell albero di parsing etichettato con X

7 Definizione diretta della sintassi Tale tecnica permette di associare: Ad ogni simbolo della grammatica un insieme di attributi Ad ogni produzione, un insieme di regole semantiche per il calcolo dei valori associati ai simboli che compaiono nella produzione Gli attributi possono essere così valutati: Per una data stringa x Costruire l albero di parse per x Applicare le regole semantiche per valutare gli attributi di ogni nodo dell albero

8 Attributi di sintesi (sythesized attribute) Un attributo di sintesi per un dato simbolo non terminale A associato ad un nodo N di un parse tree è definito attraverso una regola semantica associata con la produzione in N che utilizza solo i valori degli attributi di N e dei figli di N (A:head della produzione) Un albero di parse che mostra il valore degli attributi di ogni nodo si dice annotated parse tree

9 Esempio : notazione post Fissa Consideriamo la grammatica arricchita : expr -> expr1 + term expr.t = expr1.t term.t + expr -> expr1 term expr.t = expr1.t term.t - expr -> term expr.t = term.t term -> 0 term.t = 0 term -> 1 term.t = 1. term -> 9 term.t = 9 Obiettivo costruire un SDD: aggiungiamo attributi e regole semantiche per trasformare una espressione in notazione post fissa Associamo ad ogni simbolo della grammatica un attributo t

10 Consideriamo la stringa e proviamo a costruire l annotated parse tree ovvero annotiamo gli attributi e calcoliamo quelli di sintesi expr.t =95-2+ expr.t =95- Term.t=2 expr.t =9 term.t=5 term.t =

11 Definizione Aspetto chiave è l ordine di valutazione degli attributi ovvero di applicazione delle regole semantiche (tree traversal Dependency graphs). Una SDD, come quella dell esempio precedente, in cui la traduzione di un simbolo non terminale della testa di una produzione è ottenuto come concatenazione delle traduzioni dei non terminali del corpo della produzione nello stesso ordine in cui essi appaiono nella stessa produzione di dice semplice (simple)

12 Schemi di traduzione(translation schemes) Approccio alternativo all SDD che non necessita di associare e manipolare stringhe alla grammatica. Permette di produrre la stessa traduzione in maniera incrementale tramite l esecuzione di frammenti di codice (azioni semantiche) associati alle produzioni. L ordine di valutazione (esecuzione) delle azioni semantiche è specificato esplicitamente. Una azione semantica compare tra { } e può occupare una qualunque posizione nel body di una produzione

13 Quando si costruisce un albero di parse per una grammatica con schema di traduzione, per l azione semantica viene costruito un ulteriore figlio connesso attraverso una line trateggiata al simbolo della testa della produzione che la contiene Es: R -> + T { system.out.println( + );} R1 R + T R1 { system.out.println( + );}

14 Esempio: notazione Post fissa Consideriamo la grammatica vista in precedenza ed associamo le azioni semantiche expr -> expr1 + term expr -> expr1 term expr -> term term -> 0 term -> 1. term -> 9 {print( + )} {print( - )} {print( 0 )} {print( 1 )} {print( 9 )}

15 Albero di parse (visita post-order) expr expr + term {print( + )} expr - term {print( - )} 2 {print( 2 )} term 5 {print( 5 )} 9 {print( 9 )}

16 SDD ed ordine di valutazione Una SDD non impone uno specifico ordine di valutazione degli attributi. Ogni valutazione che prevede di calcolare il valore di un generico attributo a dopo tutti quelli che dipendono da a stesso sarebbe accettabile. Per esempio gli attributi di sintesi possono essere valutati attraverso una visita bottom-up che valuta gli attributi di un dato nodo dopo aver valutato quello dei figli

17 Attributi ereditati (inherited attributes) Un attributo ereditato per un simbolo non terminale B associato ad un nodo N di un parse tree è definito attraverso una regola semantica associata con le produzioni dei genitori di N; un attributo ereditato è definito solo in termini di valori degli dei genitori di N, di N e dei fratelli di N Un attributo di sintesi di un nodo N può essere definito anche in termini di valori di attributi ereditati di N stesso

18 Una SDD che coinvolge solo attributi di Sintesi è chiamata S-attributed. In tali tipo di SDD ogni regola semantica calcola il valore di un attributo per un simbolo non terminale della testa di una produzione solo attraverso la combinazione di attributi che compaiono nel corpo della stessa produzione Per visualizzare la traduzione indotta da una SDD, si possono utilizzare le regole per costruire, prima, il relativo annotated parse tree e poi per valutare gli attributi ad ogni nodo

19 Il valore dell attributo di un nodo può essere valutato solo dopo aver valutato il valore degli attributi da cui esso dipende Mentre in una SDD che contiene solo attributi di sintesi si può utilizzare un metodo bottom up, per SDD che contengono sia attributi di sintesi che ereditati non è garantito che si sia un solo ordine di valutazione per gli attributi

20 Esempio Consideriamo la grammatica n indica la fine della stringa Attributo per i simboli non terminali val Attributo per i simboli terminali lexval

21 continua Annotated parse tree per : 3 * n

22 Esempio Consideriamo adesso: Permette di derivare stringhe del tipo 4*8 4*9*2 Costruiamo l albero di parse per la stringa 3 * 5

23 3 * 5

24 Cerchiamo di costruire un SDD per valutare la stringhe che la grammatica è in grado di derivare. Notiamo subito che gli attributi di sintesi non sono sufficienti Le regole semantiche che dobbiamo costruire devono prevedere attributi ereditati Associamo ai simboli non terminali T ed F l attributo di sintesi val Associamo ai simboli terminali l attributo lexval Associamo al simbolo non terminale T l attributo di sintest syn e quello ereditato inh

25 L idea è quella che la radice dell albero per T eredita l attributo di F

26 3 * 5 Tutti i fattori vengono accumulati ed alla fine il risultato viene restituito e risale l abero attraverso attributi di sintesi

27 Grafo delle dipendenze Permette di determinare l ordine con cui si devono calcolare i valori degli attributi di una SDD. Si costruisce: Dato un nodo N dell albero di parse relativo ad un simbolo X della grammatica, il grafo avrà un nodo per ogni attributo di X. Supposto che una regola semantica associata ad una produzione p definisca il valore per l attributo di sintesi A.b utilizzando l attributo X.c allora il grafo ha un arco che va da X.c ad A.b. Supposto che una regola semantica associata ad una produzione p definisca il valore per l attributo ereditato B.c utilizzando l attributo X.a allora il grafo ha un arco che va da X.a ad B.c.

28 Il grafo così fatto caratterizza i possibili ordini di valutazione. L ordine di valutazione è determinato dalla sequenza di nodi N1,N2, Nk tale che se esiste un arco da Ni a Nj allora Ni<Nj (ordinamento topologico). Se il grafo presenta un ciclo non sarà possibile ordinarlo topologicamente e pertanto non c è modo di valutare l SDD su quell albero

29

30 Parsing Procedimento che permette di determinare come una stringa di terminali può essere generata da una grammatica Possiamo distinguere due grandi classi di parser: Top Down:la costruzione dell albero di parse inizia dalla root per poi proseguire verso le foglie Bottom Up:la costruzione dell albero di parse avviene in senso in verso si inizia dalle foglie per proseguire verso la radice

31 Parser Top Down La costruzione di un albero di parse con la tecnica Top-Down avviene iniziando dalla root che viene etichettata con il simboli iniziale della grammatica e ripetendo i due passi seguenti: Dato un nodo N dell albero di parse relativo ad un simbolo non terminale A scegliere una produzione per A e costruire i figli di N per tutti i simboli presenti nel corpo della produzione Trovare il nodo successivo cui costruire il sotto albero (tipicamente il sottoalbero più a sinistra etichettato con un non terminale e non ancora espanso)

32 Ad ogni passo del procedimento è problema chiave determinare la produzione che deve essere applicata per un non terminale (A) Una volta che la produzione (A produzione) è stata individuata il resto del processo di parsing consiste nell individuare il corrispondente simbolo terminale nel corpo della produzione della stringa di input. Il simbolo terminale corrente della stringa da riconoscere e che deve essere individuato nella produzione è detto simbolo di lookahead.

33 Esempio Si consideri la grammatica

34 for(; expr; expr) other

35 Parser a discesa ricorsiva:parser predittivo Un insieme di procedure ricorsive è utilizzato per l elaborazione dell input: in particolare ad ogni simbolo non terminale viene associata una procedura. Nei parser predittivi il simbolo di lookahead determina in maniera non ambigua il flusso di controllo attraverso le procedure dei non terminali. La sequenza della chiamate a procedure durante l analisi di una stringa di input definisce implicitamente un albero di parse per essa

36 Considerando la grammatica: Dovremmo definire delle procedure per i simboli stmt e optexpr In più si definirà una funzione match(t) per riconoscere il carattere di lookahead e cambiarlo per il successivo riconoscimento

37

38 Considerando l input for(; expr; expr) other Il parsing inizia con la chiamata della procedura associata al simbolo iniziale e con for carattere di lookahead Viene quindi considerata la produzione Ogni terminale è quindi accoppiato con il simbolo di lookahead e per ogni terminale viene chiamata la relativa procedura

39 Alcune considerazioni Nel caso in cui nella grammatica esistono due produzioni con la stessa testa, il parser deve applicare quella in cui controllando il primo simbolo che il corpo della produzione è in grado di generare ed il carattere di lookahead Esiste un metodo formale: Sia α una stringa della grammatica(terminali/non terminali). Si definisce FIRST(α) l insieme di simboli terminali che sono nella prima posizione (primo simbolo) di una o più stringhe di terminali generate da α

40 FIRST(stmt) = {expr, if, for, other} FIRST(optexpr) = {expr} Gli insiemi FIRST(α) e FIRST (β) sono utilizzati in presenza di due produzioni A -> α e A1 -> β; Viene scelta a A -> α se lookahed Є FIRST(A); A -> β se lookahed Є FIRST(A1)

41 Calcolo di FIRST per X Sia X un simbolo della grammatica: Se X è un simbolo terminale allora FIRST(X) = {X} Se X è un non terminale ed X->Y1 Y2. Yk (k>=1) è una produzione aggiungere a ad FIRST(X) se per un qualche indice i a Є FIRST(Yi) ε appartiene a FIRST(Y1),,FIRST(Yi-1); se ε Є FIRST(Yj) J=1,..,k --- aggiungere ε a FIRST(X) Se esiste X -> ε aggiungere ε a FIRST(X)

42 Esempio Consideriamo la grammatica...

43 Generalizzando Un parser predittivo è di fatto un programma consistente in procedure associate ai simboli non terminali. Tali procedure sostanzialmente fanno 2 cose Decidono quale produzione applicare esaminando il simbolo di lookahed. Una A-produzione con corpo α viene applicata se tale simbolo appartiene a FIRST(α) (gli insiemi FIRST devono essere disgiunti). Una ε pruduzione per un A viene applicara se il simbolo di lookahed non appartiene a nessun insieme FIRST delle produzioni per A.

44 Scelta la produzione, i simboli del corpo sono eseguiti in ordine da sinistra a destra Un simbolo non terminale viene eseguito chiamando la relativa procedura Un simbolo terminale coincidente con il simbolo di lookahead viene eseguito leggendo il simbolo successivo Se in un dato istante un simbolo terminale non coincide con il simbolo di lookahead deve essere generato un errore sintattico

45 Costruzione tabella di parsing

46 Ricorsione sinistra Una grammatica si dice ricorsiva sinistra se essa contiene un simbolo non terminale A dal quale è possibile derivare Aα per qualche stringa α. Caso più semplice: nella grammatica esiste una produzione del tipo A -> Aα (ricorsione sinistra immediata) A α può essere derivato anche attraverso produzione intermedie (A -> B, B -> Aα) La ricorsione a sinistra nei parser a discesa ricorsiva provoca loop infiniti. La ricorsione sinistra immediata può essere risolta eliminando e riscrivendo opportunamente la produzione interessata

47 A -> Aα β Notiamo subito la produzione ricorsiva a sinistra La grammatica scritta è in grado di generare stringhe del tipo: β α* Lo stesso risultato può essere ottenuto con la grammatica: A -> βr R -> αr ε La grammatica ottenuta è ricorsiva a destra. Ciò complica il processo di traduzione e valutazione di espressioni associative a sinistra

48 Algoritmo generale per eliminare la ricorsione su grammatiche senza cicli ed ε produzioni Es. pag abbozzare processo di eliminazione

49 Consideriamo

Traduzione guidata dalla sintassi

Traduzione guidata dalla sintassi Traduzione guidata dalla sintassi Attributi e definizioni guidate dalla sintassi Dipartimento di Matematica e Informatica [email protected] Analisi Semantica Analisi sintattica - output:

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

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

Definizioni syntax-directed

Definizioni syntax-directed Definizioni syntax-directed Esempio: Notazione infissa Notazione postfissa Produzioni E E 1 + T E E 1 T E T T 0 T 1 T 2... T 9 Regole semantiche E.t := E 1.t _T.t _ + E.t := E 1.t _T.t _ - E.t := T.t T.t

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

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

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 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

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

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

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

Parser Bottom UP. Giuseppe Morelli

Parser Bottom UP. Giuseppe Morelli Parser Bottom UP Giuseppe Morelli Parser Bottom UP Un parser Bottom Up lavora costruendo il corrispondente albero di parsing per una data stringa di input partendo dalle foglie (bottom) e risalendo via

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

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

Linguaggi Liberi dal Contesto. Linguaggi Liberi dal Contesto

Linguaggi Liberi dal Contesto. Linguaggi Liberi dal Contesto rammatiche e Linguaggi Liberi da Contesto Abbiamo visto che molti linguaggi non sono regolari. Consideriamo allora una classe piu ampia di linguaggi, i Linguaggi Liberi da Contesto (CFL) i CFL sono stati

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. Alberi: definizioni. Alberi Binari. Esercizi su alberi binari: metodi ricorsivi. Struttura dati per alberi generici. ASD-L - Luca Tesei

Alberi. Alberi: definizioni. Alberi Binari. Esercizi su alberi binari: metodi ricorsivi. Struttura dati per alberi generici. ASD-L - Luca Tesei Alberi Alberi: definizioni Alberi Binari Esercizi su alberi binari: metodi ricorsivi Struttura dati per alberi generici 1 Alberi Gli alberi sono strutture dati naturalmente ricorsive Un albero è un particolare

Dettagli

Lezione 7 Alberi binari: visite e alberi di ricerca

Lezione 7 Alberi binari: visite e alberi di ricerca Lezione 7 Alberi binari: visite e alberi di ricerca Informatica 6 Maggio 2015 Operazioni sugli alberi: visita La visita di un albero esplora tutti i nodi ed esegue una qualche operazione su di essi. Per

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

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

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

Descrizione delle operazioni di calcolo. Espressioni costanti semplici

Descrizione delle operazioni di calcolo. Espressioni costanti semplici Descrizione delle operazioni di calcolo Come abbiamo detto l interprete è in grado di generare nuovi valori a partire da valori precedentemente acquisiti o generati. Il linguaggio di programmazione permette

Dettagli

L intero è o il valore zero o una stringa di cifre che inizia con una cifra diversa sa zero.

L intero è o il valore zero o una stringa di cifre che inizia con una cifra diversa sa zero. ANALISI SINTATTICA Data un linguaggio scrivere una grammatica che lo generi ESERCIZIO 1 Definire una grammatica per il linguaggio L = {ww w appartiene a (a, b)*} ESERCIZIO 2 Dato l alfabeto T=[0,1,2,3,4,5,6,7,8,9,/}

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

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

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

Suffix Trees. Docente: Nicolò Cesa-Bianchi versione 21 settembre 2017

Suffix Trees. Docente: Nicolò Cesa-Bianchi versione 21 settembre 2017 Complementi di Algoritmi e Strutture Dati Suffix Trees Docente: Nicolò Cesa-Bianchi versione 21 settembre 2017 In generale, possiamo trovare tutte le occorrenze di un pattern y in un testo x in tempo O(

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

Sui Linguaggi Regolari: Teorema di Kleene - Pumping Lemm

Sui Linguaggi Regolari: Teorema di Kleene - Pumping Lemm Sui Linguaggi Regolari: Teorema di Kleene - Pumping Lemma N.Fanizzi - V.Carofiglio 6 aprile 2016 1 Teorema di Kleene 2 3 o 1 o 3 o 8 Teorema di Kleene Vale la seguente equivalenza: L 3 L FSL L REG Dimostrazione.

Dettagli

Programmazione Greedy I codici di Huffman

Programmazione Greedy I codici di Huffman Programmazione Greedy I codici di Huffman Codifica dell informazione La rappresentazione ordinaria dell informazione prevede l impiego di un numero costante di bit; per esempio ad ogni carattere del codice

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

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

Alberi. Strutture dati: Alberi. Alberi: Alcuni concetti. Alberi: definizione ricorsiva. Alberi: Una prima realizzazione. Alberi: prima Realizzazione

Alberi. Strutture dati: Alberi. Alberi: Alcuni concetti. Alberi: definizione ricorsiva. Alberi: Una prima realizzazione. Alberi: prima Realizzazione Alberi Strutture dati: Alberi Strutture gerarchiche di dati Esempi Il file system di un sistema operativo L organigramma di un azienda Alberi generali, alberi n-ari, alberi binari, Ogni nodo ha un unico

Dettagli

Il Branch & Bound. Definizione 1. Sia S R n. La famiglia S = {S 1, S 2,..., S k S} tale che S 1 S 2 S k = S viene detta suddivisione di S.

Il Branch & Bound. Definizione 1. Sia S R n. La famiglia S = {S 1, S 2,..., S k S} tale che S 1 S 2 S k = S viene detta suddivisione di S. Il Branch & Bound Il metodo Branch & Bound è una tecnica che permette di risolvere all ottimo un generico problema di Programmazione Lineare Intera. Tale metodo si basa su due concetti cardine: quello

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

Introduzione alla programmazione Algoritmi e diagrammi di flusso. Sviluppo del software

Introduzione alla programmazione Algoritmi e diagrammi di flusso. Sviluppo del software Introduzione alla programmazione Algoritmi e diagrammi di flusso F. Corno, A. Lioy, M. Rebaudengo Sviluppo del software problema idea (soluzione) algoritmo (soluzione formale) programma (traduzione dell

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

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

Logica per la Programmazione

Logica per la Programmazione Logica per la Programmazione Lezione 6 Logica del Primo Ordine Motivazioni Sintassi Interpretazioni Formalizzazione pag. 1 Limiti del Calcolo Proposizionale Nella formalizzazione di enunciati dichiarativi,

Dettagli

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

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi Ricorsivi e Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2006/07 I conigli di Fibonacci Ricerca Binaria L isola dei conigli

Dettagli

albero sintattico parser scanner Errori sintattici

albero sintattico parser scanner Errori sintattici albero programma scanner tokens parser sintattico rrori sintattici Un parser deve riconoscere la struttura di una stringa di ingresso, la cui struttura è fornita in termini di regole di produzione di una

Dettagli

Sistemi Web per il turismo - lezione 3 -

Sistemi Web per il turismo - lezione 3 - Sistemi Web per il turismo - lezione 3 - Software Si definisce software il complesso di comandi che fanno eseguire al computer delle operazioni. Il termine si contrappone ad hardware, che invece designa

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

Le funzioni in JavaScript. Modularizzazione

Le funzioni in JavaScript. Modularizzazione Modularizzazione Quando abbiamo a che fare con un problema complesso spesso lo suddividiamo in problemi più semplici che risolviamo separatamente, per poi combinare insieme le soluzioni dei sottoproblemi

Dettagli

Esercitazioni di Linguaggi e Traduttori

Esercitazioni di Linguaggi e Traduttori 1 Linguaggi CF e Riconoscitori 2 Introduzione a Yacc Introduzione a YACC Definizione dei simboli Codifica della grammatica Formato del programma prodotto da YACC Ambiguità e conflitti Conflitti shift-reduce

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

Cammini minimi fra tutte le coppie

Cammini minimi fra tutte le coppie Capitolo 12 Cammini minimi fra tutte le coppie Consideriamo il problema dei cammini minimi fra tutte le coppie in un grafo G = (V, E, w) orientato, pesato, dove possono essere presenti archi (ma non cicli)

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

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

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

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

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

LINGUAGGI CONTEXT FREE. Lezione Lezione

LINGUAGGI CONTEXT FREE. Lezione Lezione LINGUAGGI CONTEXT FREE Lezione 25-11-2010 Lezione 30-11-2010 2 INTRODUZIONE GERARCHIA DI CHOMSKY 3 4 DEFINIZIONE DEI LINGUAGGI CONTEXT FREE LINGUAGGI CF I linguaggi di tipo 2 sono detti context free (CF)

Dettagli

Unità Didattica 2 I Linguaggi di Programmazione

Unità Didattica 2 I Linguaggi di Programmazione Unità Didattica 2 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

Dettagli

RAPPRESENTAZIONE GLI ALGORITMI NOTAZIONE PER LA RAPPRESENTAZIONE DI UN ALGORITMO

RAPPRESENTAZIONE GLI ALGORITMI NOTAZIONE PER LA RAPPRESENTAZIONE DI UN ALGORITMO RAPPRESENTAZIONE GLI ALGORITMI NOTAZIONE PER LA RAPPRESENTAZIONE DI UN ALGORITMO Rappresentazione degli algoritmi Problema Algoritmo Algoritmo descritto con una qualche notazione Programma Defne del procedimento

Dettagli

RISOLUZIONE IN LOGICA PROPOSIZIONALE. Giovanna D Agostino Dipartimento di Matemaica e Informatica, Università di Udine

RISOLUZIONE IN LOGICA PROPOSIZIONALE. Giovanna D Agostino Dipartimento di Matemaica e Informatica, Università di Udine RISOLUZIONE IN LOGICA PROPOSIZIONALE Giovanna D Agostino Dipartimento di Matemaica e Informatica, Università di Udine 1. Risoluzione Definitione 1.1. Un letterale l è una variabile proposizionale (letterale

Dettagli

Il metodo dei Piani di Taglio (Cutting Planes Method)

Il metodo dei Piani di Taglio (Cutting Planes Method) Il metodo dei Piani di Taglio (Cutting Planes Method) E un metodo di soluzione dei problemi (IP) di tipo generale. L idea di base: Se la soluzione di (RL) non è intera allora la soluzione ottima intera

Dettagli

Alberi n-ari: specifiche sintattiche e semantiche. Realizzazioni. Visita di alberi n-ari.

Alberi n-ari: specifiche sintattiche e semantiche. Realizzazioni. Visita di alberi n-ari. Alberi n-ari: specifiche sintattiche e semantiche. Realizzazioni. Visita di alberi n-ari. Algoritmi e Strutture Dati + Lab A.A. / Informatica Università degli Studi di Bari Aldo Moro Nicola Di Mauro ALBERO

Dettagli

Linguaggi Regolari e Linguaggi Liberi

Linguaggi Regolari e Linguaggi Liberi Linguaggi Regolari e Linguaggi Liberi Potenza espressiva degli automi Potenza espressiva delle grammatiche 9/11/2004 Programmazione - Luca Tesei 1 Linguaggi Regolari Tutti i linguaggi che possono essere

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

Algoritmi Greedy. Tecniche Algoritmiche: tecnica greedy (o golosa) Un esempio

Algoritmi Greedy. Tecniche Algoritmiche: tecnica greedy (o golosa) Un esempio Algoritmi Greedy Tecniche Algoritmiche: tecnica greedy (o golosa) Idea: per trovare una soluzione globalmente ottima, scegli ripetutamente soluzioni ottime localmente Un esempio Input: lista di interi

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

METODI DELLA RICERCA OPERATIVA

METODI DELLA RICERCA OPERATIVA Università degli Studi di Cagliari FACOLTA' DI INGEGNERIA CORSO DI METODI DELLA RICERCA OPERATIVA Dott.ing. Massimo Di Francesco ([email protected]) i i Dott.ing. Maria Ilaria Lunesu ([email protected])

Dettagli

Algoritmi e diagrammi di flusso versione biennio

Algoritmi e diagrammi di flusso versione biennio Algoritmi e diagrammi di flusso versione biennio Pablo Genova [email protected] I. I. S. Angelo Omodeo Mortara Indirizzo Tecnico-Economico A. S. 2015 2016 Cos'è un algoritmo? Algoritmo: procedimento

Dettagli

Parser top-down. Top-Down Parsing

Parser top-down. Top-Down Parsing Parser top-down Top-Down Parsing Il parse tree è creato dalla radice alle foglie. Il parser puo essere realizzato Recursive-Descent Parsing Il Backtracking è necessario (se una scelta di una regola non

Dettagli

Logica per la Programmazione

Logica per la Programmazione Logica per la Programmazione Lezione 6 Logica del Primo Ordine Motivazioni Sintassi Interpretazioni Formalizzazione A. Corradini e F.Levi Dip.to Informatica Logica per la Programmazione a.a. 2015/16 pag.

Dettagli

Laboratorio di Informatica

Laboratorio di Informatica Laboratorio di Informatica Seconda lezione a Python Dottore Paolo Parisen Toldin - [email protected] Dottoressa Sara Zuppiroli - [email protected] L'importanza di capire Perché non dobbiamo dichiarare

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

Esercitazioni per il corso di Logica Matematica

Esercitazioni per il corso di Logica Matematica Esercitazioni per il corso di Logica Matematica Luca Motto Ros 02 marzo 2005 Nota importante. Queste pagine contengono appunti personali dell esercitatore e sono messe a disposizione nel caso possano risultare

Dettagli

Laboratorio di Python

Laboratorio di Python Laboratorio di Python Alberi binari Lab15 12 Maggio 2017 Outline Correzione esercizi per oggi Alberi binari Teoria Esercizi Esercizi per casa Saluti Esercizio 1 per casa Scrivere una funzione palindroma(s)

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

Lezioni del corso di Progetto di Linguaggi e Traduttori

Lezioni del corso di Progetto di Linguaggi e Traduttori Università di Roma La Sapienza corso di laurea in Ingegneria Informatica Lezioni del corso di Progetto di Linguaggi e Traduttori a.a. 2006/2007 Riccardo Rosati Dipartimento di Informatica e Sistemistica

Dettagli