Analisi Sintattica. Maria Rita Di Berardini. Universitá di Camerino Ruolo del parser
|
|
- Filippo Puglisi
- 4 anni fa
- Visualizzazioni
Transcript
1 Ruolo del parser Analisi 1 1 Dipartimento di Matematica e Informatica Universitá di Camerino mariarita.diberardini@unicam.it
2 Ruolo del parser Ruolo dell analisi sintattica
3 Ruolo del parser Metodologie di parsing Parsing Universali: (es: algoritmo di Cocke-Younger-Kasami o l algoritmo di arley) consentono di parsare una qualsiasi grammatica, ma sono piuttosto inefficienti Top-Down Parsing: costruiscono il parse tree dall alto (radice) verso il basso (foglie) Bottom-Up Parsing: costruiscono il parse tree dal basso verso l alto Top-Down e Bottom-Up Parsing sono più efficienti, solo per specifiche sottoclassi di grammatiche alcune di queste sottoclassi (grammatiche LL e LR) sono sufficientemente espressive da permetterci di descrivere la maggior parte dei costrutti dei linguaggi di programmazione per le grammatiche LR esistono dei generatori automatici (YACC)
4 Ruolo del parser Sintassi dei linguaggi Ogni linguaggio di programmazione ha delle regole che prescrivono la struttura sintattica dei programmi ben formati del linguaggio La sintassi dei linguaggi di programmazione può essere convenientemente specificata tramite grammatiche libere da contesto (dette anche Backus-Naur Form BNF) Perchè usiamo le CFG (context free grammars)? Una CFG costituisce una specifica della sintassi precisa e facile da capire Per alcune sottoclassi di CFGs esistono dei tools che consentono di costruire dei parser piuttosto efficienti in maniera automatica La struttura delle regole sintattiche (produzioni) che definiscono una CFG può essere molto utile in fase di traduzione dei vari costrutti del linguaggio Possiamo estendere la sintassi del linguaggio (aggiungendo nuovi costrutti e/o operazioni) in maniera abbastanza semplice
5 Part I Grammatiche Libere da Contesto
6 : Una grammatica libera da contesto è una tupla G = Σ, V, S, P dove: 1 Σ è un alfabeto finito di simboli (detti simboli terminali) 2 V è un alfabeto finito di simboli (simboli non terminali) che rappresentano categorie sintattiche 3 S V è il simbolo non terminale iniziale 4 P è un insieme finito di produzioni della forma A X 1 X 2... X n dove: A è un simbolo non terminale (A V) detto la testa o parte sinistra della produzione la stringa X 1X 2... X n (V Σ) (ogni simbolo X j V Σ è un qualsiasi simbolo terminale o non terminale di G ) è detta corpo o parte destra della produzione X 1X 2... X n può anche essere la stringa vuota (A ǫ)
7 Notazioni Terminali lettere minuscole dell alfabeto: a, b, c,...,a, b, c,... simboli di operatori: +,,,... simboli di punteggiatura cifre stringhe in grassetto: if, id,... Non terminali: lettere maiuscole A, B, C,..., X, Y, Z Stringhe in Σ : lettere minuscole u, v, w, x, y, z,... Stringhe in (V Σ) : lettere minuscole α, β, γ,..., α 1, β 1, γ 1,... Se A α 1, A α 2,..., A α n sono tutte le produzioni per un dato non terminale A possiamo usare la notazione equivalente A α 1 α 2... α n
8 Alberi di derivazione Sia G = Σ, V, S, P una grammatica libera da contesto Un albero di derivazione (o parse tree) di G è un albero i cui nodi sono etichettati con simboli in V Σ e tale che la radice è etichettata con il simbolo iniziale (S) di G ogni foglia è etichettata con un terminale ogni nodo interno è etichettato con un non terminale A ed i suoi figli, presi da sinistra verso destra, sono etichettati con i simboli X 1, X 2,..., X k della parte destra di una qualche produzione A X 1X 2... X k per A La stringa che si ottiene concatenando i simboli associati alle foglie è detta stringa associata all albero di derivazione Diciamo che un albero è un albero di derivazione per una stringa w se w è la sua stringa associata
9 Un esempio Sia G = Σ = {id, +,,, (, )}, V = { }, S =, P dove l insieme P è definito da: + () id Il seguente è un (non il solo) albero di derivazione della stringa è w = id + id id + id id id
10 Linguaggio generato: Sia G = Σ, V =, S, P una grammatica libera da contesto: Il da G denotato da L(G) è l insieme formato da tutte le stringhe di terminali w Σ per cui esiste un albero di derivazione la cui stringa associata è w Possiamo dare una alternativa introducendo il concetto di derivazione di una stringa a partire da una categoria sintattica Una derivazione è una sequenza (anche vuota) di passi di derivazione. Un passo di derivazione consiste nella riscrittura di un qualche non terminale A con la parte destra di una produzione per A Formalmente, sia α (V Σ) contenente almeno un non terminale A ed A X 1 X 2...X k P, allora possiamo riscrivere la stringa: α = βaγ G βx 1 X 2... X k γ
11 Linguaggio generato: Sia G = Σ, V =, S, P una grammatica libera da contesto: Una derivazione di una stringa w Σ a partire dal simbolo iniziale S è una sequenza S = α 0 G α 1 G α 2... G α n = w dove α j G α j+1 è un passo di derivazione, per ogni j [0, n 1] La stringa α j (Σ V) è generata a partire da S mediante un certo numero di passi di derivazione; è anche detta forma sentenziale Se n=0, allora la derivazione è composta dal solo simbolo S S G α: la stringa α è derivata da S mediante zero o più passi di derivazione S + G α: la stringa α è derivata da S mediante uno o più passi di derivazione
12 Linguaggio generato: Sia G = Σ, V =, S, P una grammatica libera da contesto: Il da G è definito come l insieme L(G) = {w Σ S G w} L insieme delle stringhe ottenute tramite derivazioni è uguale a quello definito tramite alberi di derivazione Ad ogni derivazione possiamo associare un albero di derivazione e viceversa
13 Un esempio Sia G definita da: () 3 4 id 5 e consideriamo la seguente derivazione () ( + ) (id + ) (id + id) (4) (3) ( ) (1)
14 Un esempio Sia G definita da: () 3 4 id 5 e consideriamo la seguente derivazione () ( + ) (id + ) (id + id) ( ) ( ) + + (5) (5) id id
15 Per effettuare un passo di derivazione α α dobbiamo: individuare un non terminale A in α e, quindi, partizionare α = βaγ scegliere una produzione della forma A δ ed effettuare la riscrittura α = βaγ βδγ = α Possiamo fissare quale non terminale riscrivere di volta in volta Derivazioni leftmost: riscriviamo sempre il non terminale più a sinista Forma sentenziale sinistra: una qualsiasi forma sentenziale ottenuta durante una derivazione leftmost lm : passo di derivazione leftmost lm : zero o più passi di derivazione leftmost + lm : uno o più passi di derivazione leftmost
16 Derivazioni rightmost: riscriviamo sempre il non terminale più a destra Forma sentenziale destra: una qualsiasi forma sentenziale ottenuta durante una derivazione rightmost rm : passo di derivazione leftmost rm : zero o più passi di derivazione rightmost + rm : uno o più passi di derivazione rightmost
17 Un esempio Sia G la grammatica definita da: + () id Una possibile derivazione leftmost della stringa w = id + id id è: lm + lm id + lm id + lm id + id lm id + id id Una possibile derivazione rightmost della stringa w = id + id id: rm + rm + rm + id rm +id id rm id +id id
18 Grammatiche Ambigue Una grammatica può essere vista come la di un algoritmo (ricorsivo) per generare le stringhe di un linguaggio; questo algoritmo usa per produzioni per costruire l albero di derivazione per una certa stringa Una grammatica si dice ambigua se le sue produzioni permettono di seguire due strade differenti per generare una stessa stringa sistono due alberi di derivazione T e T distinti per una stessa stringa w o, in maniera alternativa, due derivazioni leftmost o rightmost distinte per w La seguente grammatica G è ambigua: + () id lm + lm id + lm id + lm id + id lm id + id id lm lm + lm id + lm id + id lm id + id id
19 Grammatiche Ambigue I due alberi di derivazioni corrispondenti alle due derivazioni leftmost dell esempio precedente + id + id id id id id
20 liminare l ambiguità Per dimostrare che un grammatica è ambigua basta individuare una stringa w per quale esistono due distinti alberi di derivazione la cui stringa associata è w (facile) Per dimostrare che una grammatica non è ambigua bisogna provare l unicità dell albero di derivazione per ogni stringa generata dalla grammatica (non così facile... ) Indicatori di ambiguità: doppia ricorsione: la testa della produzione compare almeno due volte nel corpo della produzione, es + soprattutto in presenza di operatori binari, come nel caso del + L ambiguità deve essere eliminata molti algoritmi di parsing falliscono se la grammatica è ambigua spesso comporta una riscrittura delle produzioni che lascia inalterato il
21 Un costrutto ambiguo: dangling else stmt if expr then stmt if expr then stmt else stmt other Possiamo scrivere un comando del tipo ma, a quale then associamo l else??? if 1 then if 2 then C 1 else C 2 1 primo then: if 1 then (if 2 then C 1 ) else C 2 2 secondo then if 1 then (if 2 then C 1 else C 2 )
22 Caso (1) stmt if expr then stmt else stmt 1 if expr then stmt C 2 2 C 1
23 Caso (2): quello buono stmt if expr then stmt 1 if expr then stmt else stmt 2 C 1 C 2
24 La nuova grammatica Regola di associazione: associamo ogni else con il then non associato (spaiato) più vicino Possiamo incorporare questa regola nella grammatica per eliminare l ambiguità: stmt matched unmatched matched if expr then matched else matched non cond unmatched if expr then stmt if expr then matched else unmatched
25 Un solo albero di derivazione stmt if expr then unmatched stmt 1 matched if expr then stmt else stmt 1 C 1 C 2
26 Associatività e precedenze degli operatori Consideriamo la grammatica + () num ed i due seguenti alberi di derivazione per la stringa w = num + num num + num + num num num num num
27 Associatività e precedenze degli operatori Gli operatori aritmetici hanno delle precedenze: = 3 + (5 7) e non (3 + 5) 7. In base a queste regole semantiche il secondo albero è sbagliato Associatività degli operatori: consideriamo l espressione a quale + associamo il 5? se il + associa a sinistra, allora il 5 viene associato con il + alla sua sinistra, e quindi = (3 + 5) + 7 se il + associa a destra: il 5 viene associato con il + alla sua destra, e quindi = 3 + (5 + 7) Nel caso dell espressione associatività a sinistra: = (2 1) + 3 = 4 associatività a destra: = 2 (1 + 3) = 2
28 Associatività e precedenze degli operatori Come facciamo ad assegnare precedenze ed associatività fra operatori binari attraverso le produzioni della grammatica (struttura sintattica corretta rispetto alla semantica) definire vari livelli di precedenza e per ogni livello si crea un diverso simbolo non terminale per ogni livello si indica se l associatività e a destra o a sinistra Per la grammatica che genera il linguaggio delle espressioni fra numeri naturali abbiamo quattro operatori (+,, e /) e tre livelli di precedenza: 1 Fattori (F): gli operandi, livello di precedenza di precedenza più alto 2 Termini (T): applicazioni di e /, livello di precedenza inferiore a quello dei fattori e associatività a sinistra 3 spressioni (): applicazioni di + e, livello di precedenza inferiore a quello dei termine e dei fattori e associatività a sinistra
29 Una grammatica non ambigua per i numeri naturali F () Un espressione fra parentesi viene considerata come un operando, l uso delle parentesi consente di forzare precedenze e associatività T T F T/F F L associatività a sinistra viene espressa mediante ricorsione a sinistra + T T T
30 Una grammatica non ambigua per i numeri naturali + T T T T T F T/F F F () + T w = T T F F F 2 3 5
31 Una grammatica non ambigua per i numeri naturali + T T T T T F T/F F F () + T T F T F 3 F 1 T T F 2 2
Grammatiche. Rosario Culmone, Luca Tesei. 20/11/2006 UNICAM - p. 1/49
Grammatiche Rosario Culmone, Luca Tesei 20/11/2006 UNICAM - p. 1/49 Grammatiche libere dal contesto Ogni linguaggio di programmazione ha delle regole che prescrivono la struttura sintattica dei programmi
DettagliLinguaggi e Traduttori: Analisi sintattica
Linguaggi e Traduttori: Analisi sintattica Armando Tacchella Sistemi e Tecnologie per il Ragionamento Automatico (STAR-Lab) Dipartimento di Informatica Sistemistica e Telematica (DIST) Università di Genova
DettagliLinguaggi e Traduttori: Analisi sintattica
Linguaggi e Traduttori: Analisi sintattica Armando Tacchella Sistemi e Tecnologie per il Ragionamento Automatico (STAR-Lab) Dipartimento di Informatica Sistemistica e Telematica (DIST) Università di Genova
DettagliANALISI SINTATTICA LUCIDI DI F. D'AMORE E A. MARCHETTI SPACCAMELA
ANALISI SINTATTICA LUCIDI DI F. D'AMORE E A. MARCHETTI SPACCAMELA AUTOMI PUSHDOWN input u t w $ v x y z $ pila tabella controllo 2 ARGOMENTI Il compito dell'analisi sintattica Generazione automatica Trattamento
DettagliGrammatiche 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
DettagliGrammatiche libere da contesto. Grammatiche libere da contesto
rammatiche e Linguaggi Liberi da Contesto Abbiamo visto che molti linguaggi non sono regolari. Consideriamo allora classi piu grandi di linguaggi Linguaggi Liberi da Contesto (CFL) sono stati usati nello
DettagliGrammatiche libere da contesto. Grammatiche libere da contesto
rammatiche e Linguaggi Liberi da Contesto Abbiamo visto che molti linguaggi non sono regolari. Consideriamo allora classi piu grandi di linguaggi. Linguaggi Liberi da Contesto (CFL) sono stati usati nello
DettagliLinguaggi Liberi dal Contesto. Linguaggi Liberi dal Contesto
rammatiche e Linguaggi Liberi da Contesto Data una stringa w L(G), dove G e un CGF, possono esistere diverse derivazioni di w (che tipicamente differiscono per l ordine di applicazione delle produzioni)
DettagliProgrammazione II. Lezione 3. Daniele Sgandurra 26/10/2010.
Programmazione II Lezione 3 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 26/10/2010 1/35 Programmazione II Lezione 3 26/10/2010 Sommario 1 2 Semantica 2/35 Programmazione II Lezione 3 26/10/2010 Parte
DettagliAutomi e Linguaggi Formali
Automi e Linguaggi Formali Analisi Sintattica A.A. 2014-2015 Alessandro Sperduti sperduti@math.unipd.it Ruolo dell analisi sintattica Un compilatore deve produrre codice oggetto e deve anche controllare
DettagliGrammatiche libere da contesto. Grammatiche libere da contesto
rammatiche e Linguaggi Liberi da Contesto Abbiamo visto che molti linguaggi non sono regolari. Consideriamo allora classi piu grandi di linguaggi. Linguaggi Liberi da Contesto (CFL) sono stati usati nello
DettagliLinguaggi 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
DettagliFondamenti d Informatica: Grammatiche. Barbara Re, Phd
Fondamenti d Informatica: Grammatiche Barbara Re, Phd Grammatiche } Con il termine grammatica s intende } Un formalismo che permette di definire un insieme di stringhe mediante l imposizione di un particolare
DettagliLINGUAGGI DI ALTO LIVELLO
LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware Linguaggi di alto livello AN - 1995 Linguaggi di alto livello AN - 1995 Evoluzione dei
DettagliLinguaggi formali e compilazione
Linguaggi formali e compilazione Corso di Laurea in Informatica A.A. 2014/2015 Linguaggi formali e compilazione quivalenza di grammatiche In Informatica (e non solo, naturalmente) esistono sempre molti
DettagliAnalisi sintattica. Analisi sintattica
uolo dell analisi sintattica Un compilatore deve produrre codice oggetto e deve anche controllare che il programma in input sia scritto secondo le regole della sua sintassi L analisi lessicale controlla
DettagliCorso di Linguaggi di Programmazione
Corso di Linguaggi di Programmazione Lezione 11 Alberto Ceselli alberto.ceselli@unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 06 Aprile 2009 Riassunto delle puntate
DettagliCorso di Linguaggi di Programmazione
Corso di Linguaggi di Programmazione Lezione 3 Alberto Ceselli alberto.ceselli@unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 09 Marzo 2009 Riassunto delle puntate
DettagliLinguaggi e Traduttori: Analisi sintattica
Linguaggi e Traduttori: Analisi sintattica Armando Tacchella Sistemi e Tecnologie per il Ragionamento Automatico (STAR-Lab) Dipartimento di Informatica Sistemistica e Telematica (DIST) Università di Genova
DettagliSupplemento alle dispense di Sintassi
Supplemento alle dispense di Sintassi Luca Tesei 20 ottobre 2002 1 Formalizzazione Lo scopo di questa sezione è quello di presentare in maniera formale e precisa le nozioni di Automa e di Grammatica Libera
DettagliTraduttore diretto dalla sintassi (seconda parte) Giuseppe Morelli
Traduttore diretto dalla sintassi (seconda parte) Giuseppe Morelli Traduzione di linguaggi guidata da Grammatiche Context Free La traduzione diretta della sintassi avviene associando regole e/o frammenti
DettagliLINGUAGGI DI ALTO LIVELLO
LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware 1 LINGUAGGI DI ALTO LIVELLO Barriera di astrazione C Fortran Modula-2 Cobol Algol Basic
DettagliLINGUAGGI DI ALTO LIVELLO
LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware 1 Linguaggi di alto livello Barriera di astrazione C Fortran Modula-2 Cobol Basic Pascal
DettagliEspressività 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
DettagliGrammatiche. 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
DettagliPROLOG E ANALISI SINTATTICA DEI LINGUAGGI PROLOG E ANALISI SINTATTICA DEI LINGUAGGI PROLOG E ANALISI SINTATTICA DEI LINGUAGGI ESEMPIO
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
DettagliSintassi. Linguaggi. 4: Sintassi. Claudio Sacerdoti Coen. Universitá di Bologna 24/02/2011. Claudio Sacerdoti Coen
Linguaggi 4: Universitá di Bologna 24/02/2011 Outline 1 Wikipedia: La sintassi è la branca della linguistica che studia i diversi modi in cui le parole si uniscono tra loro per formare
DettagliPROLOG 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
DettagliGrammatiche 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,
DettagliBarriera di astrazione. Barriera di astrazione. macchina virtuale. non sono quelle della macchina hardware. Algol. Ada. Lisp. Lisp.
LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware LINGUAGGI DI ALTO LIVELLO Barriera di astrazione C Fortran Cobol Basic Pascal Python Modula-2
Dettaglialbero 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
DettagliLinguaggi di Programmazione Corso C. Parte n.2 Introduzione ai Linguaggi Formali. Nicola Fanizzi
Linguaggi di Programmazione Corso C Parte n.2 Introduzione ai Linguaggi Formali Nicola Fanizzi (fanizzi@di.uniba.it) Dipartimento di Informatica Università degli Studi di Bari Definizioni Preliminari Un
DettagliBackus Naur Form. Paolo Bison. Fondamenti di Informatica 1 A.A. 2004/05 Università di Padova. BNF, Paolo Bison, A.A ,
p.1/19 Backus Naur Form Paolo Bison Fondamenti di Informatica 1 A.A. 2004/05 Università di Padova Linguaggio di programmazione p.2/19 strumento linguistico per scrivere una sequenza di istruzioni (programma)
DettagliBottom-up Parsing. Viable Prefixes, conflitti e formato delle tabelle per il parsing LR
Bottom-up Parsing Viable Prefixes, conflitti e formato delle tabelle per il parsing LR Viable Prefixes Prima di continuare finiamo il discorso sul parsing shift-reduce in generale C è una ragione importante
DettagliCorso di Linguaggi di Programmazione
Corso di Linguaggi di Programmazione Lezione 4 Chiara Braghin braghin@dti.unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 4 Marzo 2008 Derivazioni canoniche Una derivazione
DettagliYet 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
DettagliEsempio. Grammatica E! T E!! T! *F T " F! (E) i. procedure E. ! if cc in FIRST (TE )! then T; E!!! else ERRORE (1); E! T E
Esempio Grammatica E! T E!! E! + T E " T! F T T! *F T " F! (E) i E! T E T! F T E! + T E "!! tabella codici di errore # 1. omissione di operando 2. omissione di operatore 3. simbolo inatteso 4. carattere
DettagliLinguaggi 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
DettagliSemantica e traduzione guidata dalla sintassi (cenni)
Corso di Laurea Magistrale in Ingegneria Informatica A.A. 2013-2014 Linguaggi Formali e Compilatori Semantica e traduzione guidata dalla sintassi (cenni) Giacomo PISCITELLI Compile-time semantic evaluation
DettagliPumping 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=
DettagliRagionamento Automatico Richiami di tableaux proposizionali
Richiami di logica e deduzione proposizionale Ragionamento Automatico Richiami di tableaux proposizionali (L. Carlucci Aiello & F. Pirri: SLL, Cap. 5) La logica proposizionale I tableau proposizionali
DettagliLinguaggi di Programmazione dall assembler ai linguaggi di alto livello
Linguaggi di Programmazione dall assembler ai linguaggi di alto livello LINGUAGGIO MACCHINA 0 READ 8 READ 9 LOADA 8 3 LOADB 9 4 MUL 5 STOREA 8 6 WRITE 8 7 HALT 8 DATO INTERO 9 DATO INTERO Rappresentazione
DettagliAutomi e Linguaggi Formali Automi a stack (Pushdown automata)
Automi e Linguaggi Formali Automi a stack (Pushdown automata) A.A. 2014-2015 Enrico Mezzetti emezzett@math.unipd.it Automi a stack Un Pushdown Automata (PDA) o Automa a stack Essenzialmente un ɛ-nfa con
DettagliLinguaggi 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
DettagliTraduzione guidata dalla sintassi
Traduzione guidata dalla sintassi Attributi e definizioni guidate dalla sintassi Dipartimento di Matematica e Informatica mariarita.diberardini@unicam.it Analisi Semantica Analisi sintattica - output:
DettagliTraduzione guidata dalla sintassi. Attributi e Definizioni guidate dalla sintassi
Traduzione guidata dalla sintassi Attributi e Definizioni guidate dalla sintassi Intro In questa ultima parte del corso vediamo, in breve, una tecnica che permette di effettuare analisi semantiche e traduzione
DettagliIntro. Traduzione guidata dalla sintassi. Attributi. Due notazioni a diversi livelli. Due notazioni a diversi livelli. Il flusso concettuale
Intro Traduzione guidata dalla sintassi Attributi e Definizioni guidate dalla sintassi In questa ultima parte del corso vediamo, in breve, una tecnica che permette di effettuare analisi semantiche e traduzione
DettagliAnalisi sintattica. Syntax Analysis. albero. sintattico. parser. scanner. Errori sintattici
Analisi sintattica Syntax Analysis 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
DettagliTabelle LALR. Costruzione delle tabelle di parsing LALR. Maria Rita Di Berardini
Costruzione delle tabelle di parsing LALR Dipartimento di Matematica e Informatica Università di Camerino mariarita.diberardini@unicam.it Metodo LALR Introduciamo l ultimo metodo di costruzione di tabelle
DettagliLinguaggi 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 (fanizzi@di.uniba.it) Dipartimento di Informatica Università degli Studi di Bari Grammatiche
DettagliLinguaggi 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
DettagliLinguaggi Regolari e Linguaggi Liberi. Linguaggi Regolari. Determinismo vs Non determinismo. Potere espressivo
e Linguaggi Liberi Linguaggi regolari Potere espressivo degli automi Costruzione di una grammatica equivalente a un automa Grammatiche regolari Potere espressivo delle Tutti i linguaggi che possono essere
DettagliLINGUAGGI DI ALTO LIVELLO. Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware
LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware 1 LINGUAGGI DI ALTO LIVELLO Barriera di astrazione Fortran Cobol Basic Pascal Python C
DettagliRiconoscitori e analizzatori sintattici. Scanning e parsing. Funzionamento di un parser: la tecnica Shift/Reduce. Esempio
POLITECNICO I TORINO Laboratorio di Compilatori Corso di Linguaggi e Traduttori mail: stefano.scanzio@polito.it sito: Riconoscitori e analizzatori sintattici ata una grammatica non ambigua ed una sequenza
DettagliLINGUAGGI DI ALTO LIVELLO
LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware 1 LINGUAGGI DI ALTO LIVELLO Barriera di astrazione C Fortran Modula-2 Cobol Algol Basic
DettagliDescrizione dei Linguaggi di Programmazione
Descrizione dei Linguaggi di Programmazione Nicola Fanizzi Dipartimento di Informatica Università degli Studi di Bari Linguaggi di Programmazione [010194] 4 mar, 2016 Sommario 1 Livelli di Descrizione
DettagliVerifica se un Linguaggio Regolare è vuoto
Verifica se un Linguaggio Regolare è vuoto Se si suppone di usare la rappresentazione del linguaggio nella sua forma di automa a stati finiti il problema puo essere formulato nel modo seguente: Se esiste
DettagliParte n.4 Linguaggi: Gerarchia ed Operazioni
Linguaggi di Programmazione Corso C Parte n.4 Linguaggi: Gerarchia ed Operazioni Nicola Fanizzi (fanizzi@di.uniba.it) Dipartimento di Informatica Università degli Studi di Bari Gerarchia di Chomsky Sia
DettagliProgrammazione. Marco Anisetti. Università degli Studi di Milano, Dipartimento di Informatica
Programmazione Marco Anisetti Università degli Studi di Milano, Dipartimento di Informatica marco.anisetti@unimi.it http://homes.di.unimi.it/anisetti/ Marco Anisetti - 1 / 40 Riepilogo lezione 1 Ruolo
DettagliDispensa 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)
DettagliParser 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
DettagliLINGUAGGI E TRADUTTORI - 20 giugno Prof. S. Crespi Reghizzi. Automi e espressioni regolari (40%)
LINGUAGGI E TRADUTTORI - 20 giugno 2001 - Prof. S. Crespi Reghizzi COGNOME e NOME... MATRICOLA... Tempo a disposizione: 90 minuti. Libri e appunti personali possono essere impiegati. Parte I Punti 30-esimi
DettagliOggetti sintattici. Semantica operazionale dei linguaggi di Programmazione. Oggetti sintattici. Funzioni di valutazione semantica
Oggetti sintattici Abbiamo più volte sottolineato il fatto che le stringhe di un linguaggio sono di base oggetti simbolici puri Non hanno un significato particolare associato, a parte quello di essere
DettagliFondamenti di Informatica 2
Fondamenti di Informatica 2 Linguaggi e Complessità : Lezione 1 Corso Fondamenti di Informatica 2 Marco Schaerf, 2009-2010 Linguaggi e Complessità : Lezione 1 1 Logica proposizionale Linguaggio matematico
DettagliAnalisi sintattica. Analisi sintattica. albero. sintattico. parser. scanner. Errori sintattici
Analisi sintattica Analisi sintattica albero programma scanner tokens parser sintattico rrori sintattici Un parser deve riconoscere la struttura di una stringa di ingresso, la cui struttura è fornita in
DettagliProprietà dei linguaggi non contestuali
Proprietà dei linguaggi non contestuali Argomenti della lezione Pumping lemma per i linguaggi non contestuali Proprietà di chiusura Argomenti della lezione Grammatiche non contestuali in forma ridotta
DettagliLinguaggi di Programmazione
Linguaggi di Programmazione Lezione 4 Chiara Braghin braghin@dti.unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 6 Marzo 2007 Regole della grammatica di un linguaggio
DettagliCorso di Linguaggi di Programmazione
Corso di Linguaggi di Programmazione Lezione 5 Chiara Braghin braghin@dti.unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 10 Marzo 2008 Struttura di un compilatore
DettagliDispensa 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
DettagliInterpreti, compilatori e semantica operazionale
Interpreti, compilatori e semantica operazionale 1 Linguaggi di programmazione Come si comprendono le caratteristiche di un linguaggio di programmazione? Molte risposte diverse manuali, documentazione
DettagliCorso di Linguaggi di Programmazione + Laboratorio Docente: Marco de Gemmis
Corso di Linguaggi di Programmazione + Laboratorio Docente: Marco de Gemmis Capitolo 2 Grammatiche e Linguaggi Si ringraziano il Prof. Giovanni Semeraro e il Dott. Pasquale Lops per la concessione del
DettagliPumping 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=
DettagliLe grammatiche formali
Le grammatiche formali Il carattere generativo dei sistemi linguisticii i Consideriamo i la seguente frase: Un gatto rincorre il topo Non facciamo difficoltà a riconoscere che si tratta di una frase sintatticamente
DettagliUNIVERSITÀ DEGLI STUDI DI PISA. Compiler Generator: Considerazioni e Confronti
UNIVERSITÀ DEGLI STUDI DI PISA Facoltà di Scienze Matematiche, Fisiche e Naturali Corso di Laurea Specialistica in Informatica Tesi di Laurea Compiler Generator: Considerazioni e Confronti Candidato: Gianfilippo
DettagliIntroduzione 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
DettagliConcetti di base sugli automi e sui linguaggi formali
Concetti di base sugli automi e sui linguaggi formali Andrea Burattin 18 marzo 2005 Sommario Piccolo insieme di concetti sul funzionamento degli automi (a stati finiti, a pila,...), delle grammatiche libere
DettagliCorso di Linguaggi e Traduttori 1 AA GRAMMATICHE
Corso di Linguaggi e Traduttori 1 AA 2004-05 GRAMMATICHE 1 Definizione di Grammatica Formalmente definiamo un grammatica G mediante una quadrupla V, V, P S ( ) N T, dove: V N e l insieme dei simboli non
DettagliEspressioni Regolari
Espressioni Regolari Le espressioni regolari sono costituite dalle stringhe sull alfabeto Σ = Σ {+,,*,(,),φ} ottenute secondo le seguenti regole: 1. φ e ciascun membro di Σ sono Epressioni Regolari 2.
DettagliLinguaggi formali e compilazione
Linguaggi formali e compilazione Corso di Laurea in Informatica A.A. 2014/2015 Linguaggi formali e compilazione sul corso Sito web: http://algogroup.unimore.it/people/mauro/dida/2014-2015 / Ricevimento:
DettagliLinguaggi 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
DettagliCorso di Linguaggi di Programmazione
Corso di Linguaggi di Programmazione Lezione 12 Alberto Ceselli alberto.ceselli@unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 03 Maggio 2010 Riassunto delle puntate
DettagliAutomi a Pila e Grammatiche Libere dal Contesto. Automi a Pila e Grammatiche Libere dal Contesto
utomi a Pila Un automa a pila (PDA) e una estensione degli automi a stati finiti, che ha una memoria (una pila) Vedremo due modi equivalenti per definire il linguaggio accettato da un PDA Vedremo che la
DettagliFondamenti 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
DettagliLINGUAGGI DI ALTO LIVELLO. Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware
LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware 1 Un po di storia sui linguaggi 1957 John Backus e colleghi della IBM rilasciano la prima
Dettagli9 Calcolo dei sequenti LC p
9 Calcolo dei sequenti LC p In questa sezione mostriamo un metodo più elegante, semplice e soprattutto AUTOMATICO per mostrare se una proposizione è valida o meno e soddisfacibile o meno. Tale metodo è
DettagliDall algoritmo al calcolatore: concetti introduttivi. Fondamenti di Programmazione
Dall algoritmo al calcolatore: concetti introduttivi Fondamenti di Programmazione Algoritmo Problema o compito Preparazione di una torta Programmazione del VCR MCD tra due numeri Algoritmo sequenza precisa
DettagliDefinizione di Grammatica
Corso di Linguaggi e Traduttori 1 AA 2004-05 GRAMMATICHE 1 Definizione di Grammatica Formalmente definiamo un grammatica G mediante una quadrupla ( VN, VT, P, S ) dove: V N e l insieme dei simboli non
DettagliEsercitazione. Ricorsione. May 31, Esercizi presi dal libro di Rosen
Esercitazione Ricorsione May 31, 2016 Esercizi presi dal libro di Rosen Problema 2 a) sezione 5.3 Data la seguente funzione definita ricorsivamente come: f(n+1) = 2f(n) f(0) = 3 Determinare il valore di
DettagliFasi 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
DettagliCorso di Linguaggi di Programmazione
Corso di Linguaggi di Programmazione Lezione 12 Alberto Ceselli alberto.ceselli@unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 20 Aprile 2009 Riassunto: definire
DettagliUniversità degli studi Roma Tre. linguaggio Java. A cura di A. Orlandini. Linguaggi: Sintassi e Semantica - Il. Il linguaggio Java
Università degli studi Roma Tre Linguaggi: Sintassi e Semantica Il A cura di A. Orlandini 1 Obiettivi Distinguere la sintassi dalla semantica di un linguaggio Conoscere le convenzioni del meta-linguaggio
DettagliPrecisiamo il problema di SLR. Tabelle LR. Soluzione. Esempio. Item LR(1) Item LR(1) validi. Costruzione delle tabelle di parsing LR canoniche
Precisiamo il problema di SLR Tabelle LR Costruzione delle tabelle di parsing LR canoniche In uno stato i la tabella indica una riduzione con una produzione A αse l insieme di item Ii contiene l item A
DettagliLinguaggi di Programmazione e Compilatori
Maria Rita Di Berardini Linguaggi di Programmazione e Compilatori Raccolta Esercizi 10 giugno 2009 Università di Camerino Dipartimenento di Matematica e Informatica Indice 1 Analisi Lessicale...........................................
DettagliANALISI SINTATTICA AUTOMI PUSHDOWN. v x y. input u t w. tabella controllo. pila LUCIDI DI F. D'AMORE E A. MARCHETTI SPACCAMELA.
ANALISI SINTATTICA LUCIDI DI F. D'AMORE E A. MARCHETTI SPACCAMELA AUTOMI PUSHDOWN input u t w $ pila v x y z $ tabella controllo 2 ARGOMENTI Il compito dell'analisi sintattica Generazione automatica Trattamento
DettagliProprieta dei linguaggi liberi da contesto. Proprieta dei linguaggi liberi da contesto
roprieta di CFL Semplificazione di una CFG: se un linguaggio e un CFL, ha una grammatica di una forma speciale. Pumping Lemma per CFL: simile ai linguaggi regolari. Proprieta di chiusura: alcune delle
DettagliCorso di Laurea Ingegneria Informatica Fondamenti di Informatica
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa 09 Linguaggi Sintassi e Semantica Alfonso Miola Ottobre 2009 http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica
Dettagli