Grammatiche. Rosario Culmone, Luca Tesei. 20/11/2006 UNICAM - p. 1/49

Documenti analoghi
Analisi Sintattica. Maria Rita Di Berardini. Universitá di Camerino Ruolo del parser

Linguaggi e Traduttori: Analisi sintattica

Grammatiche e Linguaggi Liberi da Contesto

Backus Naur Form. Paolo Bison. Fondamenti di Informatica 1 A.A. 2004/05 Università di Padova. BNF, Paolo Bison, A.A ,

Grammatiche libere da contesto. Grammatiche libere da contesto

Programmazione II. Lezione 3. Daniele Sgandurra 26/10/2010.

Fondamenti d Informatica: Grammatiche. Barbara Re, Phd

LINGUAGGI DI ALTO LIVELLO

Grammatiche libere da contesto. Grammatiche libere da contesto

Linguaggi e Traduttori: Analisi sintattica

Linguaggi formali e compilazione

Supplemento alle dispense di Sintassi

ANALISI SINTATTICA LUCIDI DI F. D'AMORE E A. MARCHETTI SPACCAMELA

Fondamenti di Informatica. per la Sicurezza. a.a. 2003/04. Grammatiche. Stefano Ferrari

Grammatiche libere da contesto. Grammatiche libere da contesto

LINGUAGGI DI ALTO LIVELLO

Corso di Linguaggi di Programmazione

Corso di Linguaggi di Programmazione

LINGUAGGI DI ALTO LIVELLO

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

Linguaggi di Programmazione Corso C. Parte n.2 Introduzione ai Linguaggi Formali. Nicola Fanizzi

LINGUAGGI E TRADUTTORI - 20 giugno Prof. S. Crespi Reghizzi. Automi e espressioni regolari (40%)

Grammatiche context-free

Grammatiche Parse trees Lezione del 17/10/2012

Linguaggi Liberi dal Contesto. Linguaggi Liberi dal Contesto

Linguaggi Liberi dal Contesto. Linguaggi Liberi dal Contesto

PROLOG E ANALISI SINTATTICA DEI LINGUAGGI PROLOG E ANALISI SINTATTICA DEI LINGUAGGI PROLOG E ANALISI SINTATTICA DEI LINGUAGGI ESEMPIO

Barriera di astrazione. Barriera di astrazione. macchina virtuale. non sono quelle della macchina hardware. Algol. Ada. Lisp. Lisp.

Quiz sui linguaggi CF

Espressività e limitazioni delle grammatiche regolari

Linguaggi. Che cos è un linguaggio di programmazione? Aspetti da studiare e comprendere per poter scrivere programmi:

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

Sintassi. Linguaggi. 4: Sintassi. Claudio Sacerdoti Coen. Universitá di Bologna 24/02/2011. Claudio Sacerdoti Coen

Corso di Linguaggi di Programmazione + Laboratorio Docente: Marco de Gemmis

Quiz sui linguaggi CF

Descrizione delle operazioni di calcolo. Espressioni costanti semplici

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

Linguaggio Formale 2

Corso di Linguaggi di Programmazione

Linguaggi di Programmazione dall assembler ai linguaggi di alto livello

Automi e Linguaggi Formali

Espressioni Regolari

Linguaggi Regolari e Linguaggi Liberi

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

LINGUAGGI DI ALTO LIVELLO. Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware

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

LINGUAGGI DI ALTO LIVELLO

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

Programmazione. Marco Anisetti. Università degli Studi di Milano, Dipartimento di Informatica

Oggetti sintattici. Semantica operazionale dei linguaggi di Programmazione. Oggetti sintattici. Funzioni di valutazione semantica

Linguaggi e Traduttori: Analisi sintattica

Descrizione dei Linguaggi di Programmazione

Le grammatiche formali

Linguaggi Regolari e Linguaggi Liberi

Linguaggi Regolari e Linguaggi Liberi. Linguaggi Regolari. Determinismo vs Non determinismo. Potere espressivo

Università degli studi Roma Tre. linguaggio Java. A cura di A. Orlandini. Linguaggi: Sintassi e Semantica - Il. Il linguaggio Java

Semantica operazionale dei linguaggi di Programmazione

Dall algoritmo al calcolatore: concetti introduttivi. Fondamenti di Programmazione

LA SINTASSI DEI LINGUAGGI DI PROGRAMMAZIONE. Ivan Lanese

Fondamenti teorici e programmazione

Interpreti, compilatori e semantica operazionale

Yet Another Compiler-Compiler. Generazione automatica di analizzatori sintattici

Semantica operazionale dei linguaggi di Programmazione

GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONE. Cosimo Laneve

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

GRAMMATICA FORMALE. Albero sintattico

Costruzione dell insieme dei Follow

Logica per la Programmazione

Introduzione alla programmazione

Linguaggi e grammatiche

Paolo Bison. Fondamenti di Informatica Ingegneria Meccanica Università di Padova A.A. 2008/09

Modelli per i linguaggi

Concetti di base sugli automi e sui linguaggi formali

Analisi sintattica. Analisi sintattica

Pumping lemma per i linguaggi Context-free

9 Calcolo dei sequenti LC p

Corso di Programmazione Linguaggi di Programmazione

Automa deterministico con prospezione 1. < {q}, Σ, Σ V, δ, q, S, Φ > δ(a, X) = α R. se a Gui(X α) senza spostamento della testina.

Fondamenti di Informatica per la Sicurezza a.a. 2008/09. Grammatiche. Stefano Ferrari. Unalfabetoèuninsiemefinitoenonvuotodisimboli.

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

Fondamenti d Informatica: lavoriamo con le grammatiche. Barbara Re, Phd

Linguaggi formali e compilazione

Traduzione guidata dalla sintassi. Attributi e Definizioni guidate dalla sintassi

Intro. Traduzione guidata dalla sintassi. Attributi. Due notazioni a diversi livelli. Due notazioni a diversi livelli. Il flusso concettuale

Non determinismo e grammatiche. Achille Frigeri Dipartimento di Matematica Francesco Brioschi Politecnico di Milano

LINGUAGGI DI ALTO LIVELLO. Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware

Nozioni Preliminari e Terminologia. Alfabeti Stringhe Linguaggi

Automi deterministici e non

Fasi di un Compilatore

Linguaggi formali e compilazione

Fondamenti d Informatica: linguaggi formali. Barbara Re, Phd

Definizione di Grammatica

Un messaggio di posta elettronica è costituito da una testata e da un corpo La testata contiene indirizzo,.

Foglio Elettronico Lezione 1

Bottom-up Parsing. Viable Prefixes, conflitti e formato delle tabelle per il parsing LR

Corso di Linguaggi e Traduttori 1 AA GRAMMATICHE

Transcript:

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 ben formati del linguaggio. Ad esempio in Java un programma corretto è formato da blocchi, i blocchi sono formati da statements, gli statements da espressioni, le espressioni dai token e così via. La sintassi dei linguaggi di programmazione è descretta mediante grammatiche libere dal contesto (context-free grammars). Il formalismo che spesso viene utilizzato va sotto il nome di notazione BNF (Backus-Naur Form). 20/11/2006 UNICAM - p. 2/49

Vantaggi Le grammatiche offrono vantaggi significativi sia ai progettisti dei linguaggi di programmazione che ai loro implementatori. Vediamo i principali: Descrizione sintattica precisa, facile da capire per un linguaggio di programmazione. Per alcune classi di grammatiche si possono automaticamente costruire degli analizzatori efficienti che determinano se un certo programma sorgente è sintatticamente ben formato. Con strumenti automatici è possibile trovare anomalie nella definizione delle grammatiche. Gli strumenti per il riconoscimento producono anche le strutture che possono venir utilizzati nella fase di traduzione o interpretazione del programma. Aggiungere nuovi costrutti a un linguaggio descritto tramite grammatica permette una facile evoluzione. 20/11/2006 UNICAM - p. 3/49

Grammatica libera dal contesto Una Grammatica libera dal contesto è una tupla G = Σ, V, S, P dove: Σ è un insieme finito dei simboli di alfabeto o Simboli Terminali V è un insieme finito di simboli che rappresentano Categorie Sintattiche o simboli non terminali S V è un simbolo di categoria sintattica indicato come iniziale o principale P è un insieme finito di regole, chiamate Produzioni, della forma A X 1 X 2 X k 20/11/2006 UNICAM - p. 4/49

Grammatica libera dal contesto A V è la testa o parte sinistra della produzione i {1,...,k}. X i (V Σ). La stringa X 1 X 2 X k (V Σ) si chiama corpo o parte destra della produzione. Il corpo di una produzione può anche essere vuoto. In questo caso la produzione viene scritta A ǫ. Nella notazione BNF ::= è usato a posto della freccia. 20/11/2006 UNICAM - p. 5/49

Scopo Il compito principale di una grammatica è permettere di generare stringhe di simboli terminali. Il processo di generazione delle stringhe può avvenire tramite costruzione di alberi di derivazione o, equivalentemente, derivazioni. 20/11/2006 UNICAM - p. 6/49

Simboli terminali I seguenti simboli indicano simboli terminali della grammatica: Lettere minuscole all inizio dell alfabeto: a, b, c,..., a, a,...,a 1, a 2,... Simboli di operatori: +,,,... Simboli di punteggiatura come virgole, punti e virgola, due punti, punti,... Le cifre 0,1,...,9. Stringhe in grassetto come id o if. 20/11/2006 UNICAM - p. 7/49

Simboli non terminali I seguenti simboli indicano simboli non terminali della grammatica: Lettere maiuscole all inizio dell alfabeto: A, B, C,..., A, A,...,A 1, A 2,... La lettera S che in genere indica il simbolo iniziale della grammatica (a meno che non sia specificato diversamente) Stringhe in minuscolo e in corsivo come ad esempio expr o stmt. Stringhe qualsiasi tra < e > come ad esempio < OP > oppure < AB >. 20/11/2006 UNICAM - p. 8/49

Convenzioni Le lettere maiuscole alla fine dell alfabeto: X, Y, Z,..., X, X,...,X 1, X 2,... rappresentano un simbolo terminale o non terminale, cioè simboli nell insieme Σ V. Le lettere minuscole alla fine dell alfabeto: u, v, w, x, y, z,..., u, x,...,x 1, v 2,... rappresentano stringhe di soli simboli terminali (anche vuote), cioè elementi di Σ. 20/11/2006 UNICAM - p. 9/49

Convenzioni Le lettere minuscole dell alfabeto greco: α, β, δ, γ,..., α, α,...,β 1, γ 2,... rappresentano stringhe, anche vuote, formate da simboli terminali o non terminali, cioè elementi di (V Σ). Tramite le convenzioni viste fino ad ora, vediamo che una generica produzione della grammatica può essere indicata con A α. Se A α 1, A α 2,...,A α k sono tutte le produzioni con lo stesso simbolo a sinistra A (le chiamiamo A-produzioni), allora possiamo scrivere equivalentemente A α 1 α 2 α k. Le α i, i = 1, 2,...,k sono chiamate alternative per A. A meno che non si specifichi diversamente, assumeremo che la parte sinistra della prima produzione data per una grammatica sia il simbolo iniziale. 20/11/2006 UNICAM - p. 10/49

Alberi di produzione Sia G = Σ, V, S, P una grammatica libera dal contesto. Un albero di derivazione di G è un albero in cui i nodi sono etichettati con i simboli della grammatica Σ V e sono rispettate le seguenti proprietà: La radice dell albero è etichettata con il simbolo iniziale S Ogni foglia dell albero è etichettata con un simbolo terminale Ogni nodo interno dell albero è etichettato con un simbolo non terminale A i cui figli, presi da sinistra a destra, sono etichettati con i simboli X 1 X 2 X n della parte destra di una qualche produzione A X 1 X 2 X n in P. 20/11/2006 UNICAM - p. 11/49

Esempio Consideriamo la seguente grammatica: E E + E E E (E) E id I simboli terminali sono (, ), +,,,id. L unico simbolo non terminale è E che è anche simbolo iniziale. L albero di derivazione per id + id id è il seguente: E E + E id E id * E id 20/11/2006 UNICAM - p. 12/49

Alberi di derivazione Tramite gli alberi di derivazione e la nozione di stringa associata possiamo definire precisamente cosa si intende per linguaggio generato da una grammatica. Sia G = Σ, V, S, P una grammatica libera dal contesto. Il linguaggio generato da G è indicato con L(G) ed è l insieme delle stringhe di w Σ tali che esiste un albero di derivazione di G la cui stringa associata è w 20/11/2006 UNICAM - p. 13/49

Passo di derivazione Sia G = Σ, V, S, P una grammatica libera dal contesto e sia α una stringa che contiene almeno un simbolo non terminale A. Se A X 1 X 2 X k P, allora possiamo riscrivere: α = δaγ G δx 1 X 2 X k γ Il simbolo G rappresenta un passo di derivazione per la grammatica G. Spesso, se la grammatica che consideriamo è chiara dal contesto, ometteremo il pedice G. 20/11/2006 UNICAM - p. 14/49

Derivazione Sia G = Σ, V, S, P una grammatica libera dal contesto. Una derivazione di una stringa w Σ a partire da S è una sequenza: S = α 0 G α 1 G α 2 G α n = w dove, per ogni i {0, 1,...,n 1}, α i G α i+1 è un passo di derivazione che riscrive un qualche simbolo non terminale di α i. 20/11/2006 UNICAM - p. 15/49

Derivazione Si noti che se i < n allora α i (Σ V ). Una stringa di questo tipo, generata cioè con un certo numero di passi di derivazione a partire dal simbolo iniziale, viene chiamata forma sentenziale. Una derivazione lunga 0 passi è la sequenza composta solo dal simbolo S. Per indicare una derivazione di zero o più passi da S ad una certa stringa α scriviamo S G α, mentre S + G α indica una derivazione lunga almeno 1 passo da S a α 20/11/2006 UNICAM - p. 16/49

Linguaggio generato mediante derivazione Possiamo definire il linguaggio generato dalla grammatica anche con la nozione di derivazione dicendo che L(G) = {w Σ S G w}. Questa definizione è equivalente a quella data usando gli alberi di derivazione, nel senso che l insieme di stringhe definito con le derivazioni è lo stesso di quello definito con gli alberi di derivazione. Per convincersi di questo basta notare che la costruzione di una derivazione induce in maniera naturale la costruzione di un albero di derivazione. 20/11/2006 UNICAM - p. 17/49

Esempio di derivazione Prendiamo ad esempio una derivazione per la stringa (id + id) con la grammatica dell esempio precedente: E E (E) (E + E) (id + E) (id + id) Ogni passo di derivazione si riflette nel corrispondente albero di derivazione 20/11/2006 UNICAM - p. 18/49

Esempio di derivazione E E - E E - E ( E ) E E E - E - E - E ( E ) ( E ) ( E ) E + E E + E E + E id id id 20/11/2006 UNICAM - p. 19/49

Scelte Si noti che, durante la derivazione di una stringa dal simbolo iniziale della grammatica, ad ogni passo occorre fare due scelte. Supponiamo di avere una forma sentenziale β (cioè S β) che non sia una stringa di soli terminali. In generale, per fare un passo di derivazione β β, bisogna: 1. Individuare un simbolo non terminale in β che sarà il candidato per la riscrittura: β = αaγ 2. Scegliere una produzione A δ, fra le eventuali possibili scelte per A, con la quale effettuare la riscrittura β = αaγ αδγ 20/11/2006 UNICAM - p. 20/49

Derivazione Leftmost Ad ogni passo si riscrive il simbolo non terminale A di una forma sentenziale β che sta più a sinistra: β = xaα (ricordiamo che per x si intende una stringa di soli simboli terminali). Le forme sentenziali che si trovano lungo una derivazione leftmost si chiamano forme sentenziali sinistre. Per indicare che ad un passo di derivazione si è applicata la regola leftmost utilizziamo la notazione xaα lm xδα a In caso di più passi di derivazione leftmost usiamo lm ( + lm ) per zero o più passi (per uno o più passi). Si noti che una derivazione è leftmost se e solo se tutti i passi di cui è composta sono leftmost. a Omettiamo il simbolo G che indica la grammatica che stiamo usando. In questi casi sarà opportuno sincerarsi che la grammatica G in questione sia chiaramente specificata nel contesto. 20/11/2006 UNICAM - p. 21/49

Derivazione Rightmost Ad ogni passo riscriviamo il simbolo non terminale più a destra. Le forme sentenziali sono dette forme sentenziali destre e la notazione usata è rm con le stesse estensioni viste nel caso leftmost: S rm αax rm αδx. 20/11/2006 UNICAM - p. 22/49

Ambiguità Una grammatica libera dal contesto G si dice ambigua se e solo se esiste una stringa w L(G) tale che esistono due alberi di derivazione T e T di G con le seguenti proprietà: T e T sono diversi T e T hanno w come stringa associata Di converso, G non è ambigua se per ogni stringa w L(G) esiste uno ed un solo albero di derivazione di G che ha w come stringa associata. 20/11/2006 UNICAM - p. 23/49

Esempio di ambiguità Consideriamo la seguente grammatica: E E + E E E (E) id Questa grammatica è ambigua poichè per la stringa id + id id esistono i due alberi di derivazione. Equivalentemente esistono due derivazioni leftmost. 20/11/2006 UNICAM - p. 24/49

Esempio di ambiguità Le due derivazioni leftmost per la stringa id + id id: E lm E + E lm id + E lm id + E E lm id + id E lm id + id id E lm E E lm E + E E lm id + E E lm id + id E lm id + id id E E E + E E * E id E * E E + E id id id id id 20/11/2006 UNICAM - p. 25/49

Disambiguare La disambiguazione di una grammatica consiste nella riscrittura delle sue produzioni (anche introducendo o togliendo simboli non terminali) in modo tale da lasciare inalterato il linguaggio generato e da avere un solo albero di derivazione per tutte le stringhe, anche quelle per le quali esistevano più alberi di derivazione associati nella grammatica di partenza. 20/11/2006 UNICAM - p. 26/49

Un costrutto ambiguo Consideriamo il costrutto if-then-else stmt if expr then stmt if expr then stmt else stmt altri_comandi E possibile ottenere la stessa frase con applicazione diversa della stessa produzione: oppure stmt if expr then stmt if expr then if expr then stmt else stmt stmt if expr then stmt else stmt if expr then if expr then stmt else stmt 20/11/2006 UNICAM - p. 27/49

Alberi di derivazione stmt if expr then stmt E 1 if expr then stmt else stmt E 2 C 1 C 1 stmt if expr then stnt else stnt E 1 if expr then stmt C 2 E 2 C 1 20/11/2006 UNICAM - p. 28/49

match stmt matched_stmt unmatched_stmt matched_stmt if expr then matched_stmt else matched_stmt non_cond unmatched_stmt if expr then stmt if expr then matched_stmt else unmatched_stmt 20/11/2006 UNICAM - p. 29/49

Albero di derivazione stmt unmatched_stmt if expr then stmt E 1 matched_stmt if expr then matched_stmt else matced_stmt E 2 non_cond non_cond C 1 C 2 20/11/2006 UNICAM - p. 30/49

Associatività Talvolta se adeguatamente progettata la sintassi può agevolare la fase di analisi semantica. Per spiegare meglio questo caso si consideri gli operatori artimetici +,,, /. In una espressione aritmetica, ad esempio a + b c d/e l ordine di valutazione è: a + b c d / e 3 1 4 2 L ordine di valutazione può essere alterato mediante l uso delle parentesi. Ad esempio: ( a + b ) c d / e 1 2 4 3 20/11/2006 UNICAM - p. 31/49

Precedenza degli operatori Si possono definire i seguenti livelli di precedenza fra gli operatori aritmetici: 1. Termini (simbolo T), cioè gli operandi. Hanno il maggiore livello di precedenza per definizione. Nei termini sono comprese le parentesi che sono le prime ad essere valutate. 2. Fattori (simbolo F), cioè applicazione di o /. Hanno la stessa precedenza, inferiore a quella dei termini. L associatività è a sinistra (come è di solito nei linguaggi) 3. Espressioni (simbolo E), cioè applicazione di + e. Hanno la precedenza più bassa di tutti. L associatività è a sinistra. 20/11/2006 UNICAM - p. 32/49

Sintassi delle espressioni aritmetiche Tenendo conto delle precedenze possiamo definire la seguente sintassi. Come si può notare a priorità maggiore corrisponde non terminali prossimi a terminali. E F E+F E-F F T F *T F /T T V C (E) Definizione di Espressione aritmetica Definizione di Fattore Definizione di Termine dove V è la classe sintattica delle variabili e C la classe sintattica delle costanti. 20/11/2006 UNICAM - p. 33/49

Esempio di espressione aritmetica 1 L espressione aritmetica 3 + x ha associato l albero di derivazione: E E F T + F T V C 20/11/2006 UNICAM - p. 34/49

Esempio di espressione aritmetica 2 L espressione aritmetica 3 + x 2 ha associato l albero di derivazione: E E + F F T C F T V * T C 20/11/2006 UNICAM - p. 35/49

Esempio di espressione aritmetica 3 L espressione aritmetica (3 + x) 2 ha associato l albero di derivazione: E F F T ( E * T ) C E F T + F T V C 20/11/2006 UNICAM - p. 36/49

Fase di valutazione delle espressioni La tecnica per associare la valutazione delle espressioni aritmetiche ricalca l applicazione delle produzioni che sono servite per generare l espressione ma in ordine inverso. Ovvero con la sintassi sotto mano si cerca di ridurre sino a quando gli operatori sono pieni quindi si effettua l operazione vera e propria. 20/11/2006 UNICAM - p. 37/49

Scrittura di grammatiche Assenza di ricorsione S aa bb A ab c B ba c Il linguaggio generato è {aab, ac, bba, bc} Ricorsione diretta S aa bb A aa c B ba c Il linguaggio generato è {bba, bc} {a n c n > 0}. 20/11/2006 UNICAM - p. 38/49

Ricorsione destra, sinistra e mutua Ricorsione destra Il linguaggio generato è {a n b n 0} Ricorsione sinistra Il linguaggio generato è {ba n n 0} Mutua ricorsione S as b S Sa b A 1B a B 0A b Il linguaggio generato è {a, 1b, 10a, 101b, 1010a,... } 20/11/2006 UNICAM - p. 39/49

xy n z Produzioni del tipo xy n z dove n può essere positivo o anche zero e x e z sono delle stringhe prefisso e suffisso: Linguaggio Vincoli Grammatica {c, bc, bbc,... } n 0, x = ǫ, z = c S bs c {bc, bbc,... } n > 0, x = ǫ, z = c S bs bc {ab, abb,... } n > 0, x = a, z = ǫ (ricorsione sinistra) S Sb ab (ricorsione destra) S aa, A ba b {a, ab, abb,... } n 0, x = a, z = ǫ S aa, A ba ǫ {ac, abc, abbc,... } n 0, x = a, z = c S aa, A ba c {ac, abc, abbc,... } n > 0, x = a, z = c S aa, A ba bc 20/11/2006 UNICAM - p. 40/49

a n b n Linguaggi con espansione centrale simmetrica S asb ab che genera il linguaggio {a n b n n > 0}. Se si vuole generare il linguaggio: {a 2n bb c n n 0} la produzione può essere: S aasc bb 20/11/2006 UNICAM - p. 41/49

Ricorsione composta Si possono comporre i diversi tipi di ricorsione: centrale e destra per ottenere linguaggi "complessi". Ad esempio se si vuole il linguaggio: {a n c b m dd b n n, m 0} si può ottenere con: S B asb cb bb dd Se si vuole ottenere il linguaggio {a n c b m dd b n n, m > 0} si deve forzare la condizione terminale congruente ovvero: S B asb acbb bb bdd 20/11/2006 UNICAM - p. 42/49

Linguaggio complesso Definiamo la grammatica per il seguente linguaggio: L = {a n b c m d a m n 0, m > 0} {b k a 2n k, n 0} Caratteristiche salienti unione di due linguaggi, nel primo linguaggio si individua una ricorsione destra con suffisso (a n b) seguita da una ricorsione centrale (c m da m ) nel secondo linguaggio è la giustapposizione di due ricorsioni destre: S A BC A aa bcda D cda d B bb ǫ C aac ǫ 20/11/2006 UNICAM - p. 43/49

BNF BNF è l acronimo di " Backus Naur Form" dagli autori John Backus e Peter Naur che la indrodussero per la prima volta per descrivere la sintassi del linguaggio ALGOL 60 (nonno del Pascal). Il formalismo BNF è un meta-linguaggio per descrivere linguaggi. I Simboli del meta-linguaggio sono: ::= significa "è definito come" significa "o" < > indicano simboli non terminali Alcuni hanno esteso il linguaggio con: [ ] quello incluso tra parentesi è opzionale { } quello racchiuso tra parentesi è ripetuto 0 o più volte " " quello tra doppi apici è un simbolo terminale xxx i simboli terminali sono in grassetto 20/11/2006 UNICAM - p. 44/49

Esempio BNF Il formato BNF può essere applicato non solo alla specifica della sintassi di un linguaggio di programmazione ma anche a: <indirizzo postale> ::= <destinatario> <indirizzo> <località> <destinatario> ::= [<titolo>] [<nome> <iniziale>] <cognome> <a_capo> <indirizzo> ::= <via> <numero civico> <a_capo> <località> ::= [<CAP>] <comune> <provincia> <CAP> ::= <cifra><cifra><cifra><cifra><cifra> <cifra> ::= 0 1 2 3 4 5 6 7 8 9... Produce cose del tipo: Dr Paolo Rossi via della Pace 32 Camerino MC 20/11/2006 UNICAM - p. 45/49

Grafo sintattico In BNF si ha: program ::= begin <statement> end statement ::= <statement> ";" <statement>... Una rappresentazione grafica quivalente è: program begin statement end ; 20/11/2006 UNICAM - p. 46/49

Espressioni regolari Sia Σ E = {,, (, )} e Σ è una qualsiasi insime finito di simboli. Se Σ s = Σ E Σ definire la grammatica libera che denotta le espressioni regolari su alfabeto Σ. E E * EE (E) E E T ǫ T s 1 s 2... s n s i Σ 20/11/2006 UNICAM - p. 47/49

Esercizio Si vuole realizzare un linguaggio che descriva un albero genealogico. Un albero genealogico mostra la gerachia degli antenati di una data persona. L albero genealogico può essere su linea paterna o materna se tiene conto solo del padre o solo della madre. Le informazioni per ogni nodo dell albero sono: Nome Cognome (nel caso della madre può essere diverso nella gerarchia) Eventuale e facoltativo cognome da sposata nel caso di madre Figli 20/11/2006 UNICAM - p. 48/49

Esercizio Il nodo generico elenca tra parentesi tonde le informazioni su elencate. Una tipica frase di questo linguaggio è la seguente: (Maria Rossi Bianchi (Francesco Bianchi)(Paola Bianchi (Alberto Gialli)(Stefania Gialli))) Ovvero Maria Rossi in Bianchi ha due figli: Francesco Bianchi e Paolo Bianchi. Paolo Bianchi ha due figli: Alberto Gialli e Stefania Gialli. Da notare che il cognome acquisito da Paolo Bianchi e Gialli poichè i figli hanno cognome Gialli anche se non specificato nella madre. L alfabeto del linguaggio è: Σ = {(, )} {InsiemeDeiNomi} {InsiemeDeiCognomi} Nel caso precedente si ha che: Σ = {(, )} {M aria, F rancesco, P aola, Alberto, Stef ania} {Rossi, Bianchi, Gialli} 20/11/2006 UNICAM - p. 49/49