GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONElaneve/html/lez1-SINTASSI.pdf · definire la grammatica,...
Transcript of GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONElaneve/html/lez1-SINTASSI.pdf · definire la grammatica,...
![Page 1: GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONElaneve/html/lez1-SINTASSI.pdf · definire la grammatica, un insieme finito di regole che consentono di derivare solamente ed esattamente](https://reader031.fdocument.pub/reader031/viewer/2022021807/5be37f5109d3f2d7048b5669/html5/thumbnails/1.jpg)
1
GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONE
Cosimo Laneve
![Page 2: GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONElaneve/html/lez1-SINTASSI.pdf · definire la grammatica, un insieme finito di regole che consentono di derivare solamente ed esattamente](https://reader031.fdocument.pub/reader031/viewer/2022021807/5be37f5109d3f2d7048b5669/html5/thumbnails/2.jpg)
2
argomenti
1. linguaggi di programmazione
2. definizione formale di insiemi infiniti
3. la grammatica e la notazione BNF
4. notazioni alternative e EBNF
5. esempi/esercizi
questa lezione non si trova sul Savitch
![Page 3: GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONElaneve/html/lez1-SINTASSI.pdf · definire la grammatica, un insieme finito di regole che consentono di derivare solamente ed esattamente](https://reader031.fdocument.pub/reader031/viewer/2022021807/5be37f5109d3f2d7048b5669/html5/thumbnails/3.jpg)
3
linguaggi di programmazione
un linguaggio di programmazione è un insieme di frasi (detti “programmi”) per cui esiste un calcolatore che li esegue
osservazione: non tutti gli insiemi di frasi sono “eseguibili” {! matteo è ricco, marco ha la penna, !! ! ! maria mangia, mirella guarda, !! ! ! mirko legge il giornale! ! } !
è un insieme di frasi per cui non esiste un calcolatore che li possa eseguire
![Page 4: GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONElaneve/html/lez1-SINTASSI.pdf · definire la grammatica, un insieme finito di regole che consentono di derivare solamente ed esattamente](https://reader031.fdocument.pub/reader031/viewer/2022021807/5be37f5109d3f2d7048b5669/html5/thumbnails/4.jpg)
4
insiemi finiti e infiniti
problema: come definire formalmente un linguaggio di programmazione? • come definire con precisione l’insieme delle frasi?
osservazione: sappiamo definire con precisione gli insiemi finiti: – cifre = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} – giorni = {lun, mar, mer, gio, ven, sab, dom}
siamo imprecisi sugli insiemi infiniti: – naturali = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, …} – colori = {bianco, rosso, grigio antracite, …}
cosa significano i “…”?
![Page 5: GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONElaneve/html/lez1-SINTASSI.pdf · definire la grammatica, un insieme finito di regole che consentono di derivare solamente ed esattamente](https://reader031.fdocument.pub/reader031/viewer/2022021807/5be37f5109d3f2d7048b5669/html5/thumbnails/5.jpg)
5
sintassi/Backus
John Warner Backus vincitore del 1977 ACM Turing Award for profound, influential, and lasting contributions to the design of practical high level programming systems, notably through his work on FORTRAN, and for publication of formal procedures for the specification of programming languages.
la definizione formale di insiemi infiniti: definire la grammatica, un insieme finito di regole che consentono di derivare solamente ed esattamente gli elementi dell’insieme che stiamo definendo
esempio: i naturali sono tutte le frasi derivabili dalla grammatica cifra = 0 cifra = 1 cifra = 2 cifra = 3 cifra = 4 … cifra = 9 naturale = cifra naturale = cifra naturale
![Page 6: GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONElaneve/html/lez1-SINTASSI.pdf · definire la grammatica, un insieme finito di regole che consentono di derivare solamente ed esattamente](https://reader031.fdocument.pub/reader031/viewer/2022021807/5be37f5109d3f2d7048b5669/html5/thumbnails/6.jpg)
6
grammatica/derivazioni
come derivare il naturale 257 naturale = cifra naturale
= cifra cifra naturale = cifra cifra cifra = 2 cifra cifra = 2 cifra 7 = 2 5 7!
osservazione: una derivazione è una sequenza finita di sostituzioni (o espansioni)
il linguaggio generato dal non-terminale naturale è l’insieme di frasi (= sequenze di simboli terminali) derivabili da esso
![Page 7: GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONElaneve/html/lez1-SINTASSI.pdf · definire la grammatica, un insieme finito di regole che consentono di derivare solamente ed esattamente](https://reader031.fdocument.pub/reader031/viewer/2022021807/5be37f5109d3f2d7048b5669/html5/thumbnails/7.jpg)
7
la notazione BNF -- Backus-Naur Formè una notazione per abbreviare le regole sintattiche anziché scrivere
cifra = 0 ; cifra = 1; cifra = 2 ; cifra = 3 ; cifra = 4 ; cifra = 5 ; cifra = 6 ; cifra = 7 ; cifra = 8 ; cifra = 9 naturale = cifra ; naturale = cifra naturale
conviene scrivere
cifra = 0 ⏐ 1 ⏐ 2 ⏐ 3 ⏐ 4 ⏐ 5 ⏐ 6 ⏐ 7 ⏐ 8 ⏐ 9! naturale = cifra ⏐ cifra naturale
esempio: i numeri interi (= naturali che possono essere prefissati dai segni + oppure –) intero = naturale | + naturale | – naturale
il simbolo | rappresenta !l’alternativa
![Page 8: GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONElaneve/html/lez1-SINTASSI.pdf · definire la grammatica, un insieme finito di regole che consentono di derivare solamente ed esattamente](https://reader031.fdocument.pub/reader031/viewer/2022021807/5be37f5109d3f2d7048b5669/html5/thumbnails/8.jpg)
8
i programmi in C++
programma = #include <iostream>!! ! ! using namespaces std ;! int main(){ ! lista_di_dichiarazioni lista_di_comandi return (0) ; }!
esempio: int main(){ return(0) ; }
(lista_di_dichiarazioni e lista_di_comandi sono vuoti)
![Page 9: GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONElaneve/html/lez1-SINTASSI.pdf · definire la grammatica, un insieme finito di regole che consentono di derivare solamente ed esattamente](https://reader031.fdocument.pub/reader031/viewer/2022021807/5be37f5109d3f2d7048b5669/html5/thumbnails/9.jpg)
9
grammatica/notazione Stoutroup
esempio scrive “:” invece di “=”
mette in colonna invece di usare “|”
![Page 10: GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONElaneve/html/lez1-SINTASSI.pdf · definire la grammatica, un insieme finito di regole che consentono di derivare solamente ed esattamente](https://reader031.fdocument.pub/reader031/viewer/2022021807/5be37f5109d3f2d7048b5669/html5/thumbnails/10.jpg)
10
grammatica/notazione diagrammi sintattici !!!! cifra !
!
! naturale
0
1
9
cifra
![Page 11: GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONElaneve/html/lez1-SINTASSI.pdf · definire la grammatica, un insieme finito di regole che consentono di derivare solamente ed esattamente](https://reader031.fdocument.pub/reader031/viewer/2022021807/5be37f5109d3f2d7048b5669/html5/thumbnails/11.jpg)
ricapitolando • una grammatica è uno strumento linguistico per definire
insiemi infiniti di stringhe in maniera precisa e inequivocabile
• è utilizzata per definire i linguaggi di programmazione esempio: programma = int main(){ lista_di_dichiarazioni lista_di_comandi return(0); }
• le grammatiche sono alla base di molti tool relativi ai linguaggi di programmazione, a partire dal compilatore
• cosa vi chiediamo: 1. data una grammatica, quale linguaggio genera? 2. data una descrizione informale di un linguaggio, sapete formalizzarlo
tramite una grammatica?11
![Page 12: GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONElaneve/html/lez1-SINTASSI.pdf · definire la grammatica, un insieme finito di regole che consentono di derivare solamente ed esattamente](https://reader031.fdocument.pub/reader031/viewer/2022021807/5be37f5109d3f2d7048b5669/html5/thumbnails/12.jpg)
BNF – esercizio 1: dalla grammatica al linguaggio
grammatica: N = NCIFRA | NCARATTERE NCIFRA!
! NCIFRA = CIFRA | CIFRA NCIFRA! ! NCARATTERE = CARATTERE | CARATTERE NCARATTERE! ! CIFRA = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9! ! CARATTERE = a | b | c | d | e | f | … | x | y | z! !!! qual è il linguaggio generato da N?
12
![Page 13: GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONElaneve/html/lez1-SINTASSI.pdf · definire la grammatica, un insieme finito di regole che consentono di derivare solamente ed esattamente](https://reader031.fdocument.pub/reader031/viewer/2022021807/5be37f5109d3f2d7048b5669/html5/thumbnails/13.jpg)
BNF – esercizio 2
grammatica: ! N = NCIFRA | NCARATTERE NCIFRA! ! NCIFRA = CIFRA | CIFRA NCIFRA! ! NCARATTERE = CARATTERE | CARATTERE NCARATTERE! ! CIFRA = 0 | PARI | DISPARI! ! PARI = 2 | 4 | 6 | 8! ! DISPARI = 1 | 3 | 5 | 7 | 9! ! CARATTERE = a | b | c | d | e | f | … | x | y | z! !! qual è il linguaggio generato da N?
13
![Page 14: GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONElaneve/html/lez1-SINTASSI.pdf · definire la grammatica, un insieme finito di regole che consentono di derivare solamente ed esattamente](https://reader031.fdocument.pub/reader031/viewer/2022021807/5be37f5109d3f2d7048b5669/html5/thumbnails/14.jpg)
BNF – esercizio 3: dal linguaggio alla grammatica
linguaggio: insieme delle stringhe composte da un numero dispari di coppie miste (cifra carattere) oppure (carattere cifra) intervallate da “.”
esempi: a4.5b.2c 7s a1.2b.2c.6r.0e !! qual è la grammatica che lo genera?
14
![Page 15: GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONElaneve/html/lez1-SINTASSI.pdf · definire la grammatica, un insieme finito di regole che consentono di derivare solamente ed esattamente](https://reader031.fdocument.pub/reader031/viewer/2022021807/5be37f5109d3f2d7048b5669/html5/thumbnails/15.jpg)
BNF – esercizio 4: dal linguaggio alla grammatica
linguaggio: insieme delle stringhe palindrome su un alfabeto composto solo da “a” e “b” !
a b aa bb aba abba ababa bab !! qual è la grammatica che lo genera?
15
![Page 16: GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONElaneve/html/lez1-SINTASSI.pdf · definire la grammatica, un insieme finito di regole che consentono di derivare solamente ed esattamente](https://reader031.fdocument.pub/reader031/viewer/2022021807/5be37f5109d3f2d7048b5669/html5/thumbnails/16.jpg)
BNF – stringa vuota
il simbolo ε viene usato per indicare la stringa vuota
esempio: N = ε | a N! - genera il linguaggio delle sequenze anche nulle di a cioè
{ ε, a, aa, aaa, ... }
il simbolo ε • consente di definire linguaggi che includono anche la stringa vuota • consente di riscrivere le definizioni di alcuni linguaggi in modo più
compatto • ricordarsi dell’assioma (σ è una frase): σ ε = ε σ = σ
16
![Page 17: GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONElaneve/html/lez1-SINTASSI.pdf · definire la grammatica, un insieme finito di regole che consentono di derivare solamente ed esattamente](https://reader031.fdocument.pub/reader031/viewer/2022021807/5be37f5109d3f2d7048b5669/html5/thumbnails/17.jpg)
BNF – esercizio 5: stringa vuota
la grammatica dell'Esercizio 1: !
N = NCIFRA | NCARATTERE NCIFRA! ! NCIFRA = CIFRA | CIFRA NCIFRA! ! NCARATTERE = CARATTERE | CARATTERE NCARATTERE! ! CIFRA = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9! ! CARATTERE = a | b | c | d | e | f | … | x | y | z !
!come si può semplificare usando il simbolo ε ?
!
17
![Page 18: GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONElaneve/html/lez1-SINTASSI.pdf · definire la grammatica, un insieme finito di regole che consentono di derivare solamente ed esattamente](https://reader031.fdocument.pub/reader031/viewer/2022021807/5be37f5109d3f2d7048b5669/html5/thumbnails/18.jpg)
BNF – esercizio 6: stringa vuota
la grammatica dell'Esercizio 4: !
N = a | b | aa | bb | a N a | b N b!!!!
come si può semplificare usando il simbolo ε ? !
18
![Page 19: GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONElaneve/html/lez1-SINTASSI.pdf · definire la grammatica, un insieme finito di regole che consentono di derivare solamente ed esattamente](https://reader031.fdocument.pub/reader031/viewer/2022021807/5be37f5109d3f2d7048b5669/html5/thumbnails/19.jpg)
EBNF
EBNF: estendono le grammatiche BNF con dei simboli aggiuntivi per la definizioni di parti opzionali o ricorrenti: parentesi tonde, quadre e graffe. !
la sintassi del linguaggio C+o- è espressa con grammatiche EBNF
19
![Page 20: GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONElaneve/html/lez1-SINTASSI.pdf · definire la grammatica, un insieme finito di regole che consentono di derivare solamente ed esattamente](https://reader031.fdocument.pub/reader031/viewer/2022021807/5be37f5109d3f2d7048b5669/html5/thumbnails/20.jpg)
EBNF – parentesi tonde
parentesi tonde ( ) : indicano una sola occorrenza, tipicamente si usano per alternative annidate:
! N = (a|b) c
!produce stringhe della forma ac oppure bc equivale alla grammatica
N = M c! ! ! ! ! ! M = a | b
20
![Page 21: GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONElaneve/html/lez1-SINTASSI.pdf · definire la grammatica, un insieme finito di regole che consentono di derivare solamente ed esattamente](https://reader031.fdocument.pub/reader031/viewer/2022021807/5be37f5109d3f2d7048b5669/html5/thumbnails/21.jpg)
EBNF – parentesi quadre
parentesi quadre [ ] : indicano 0 o 1 occorrenza esempio: N = [a] c produce stringhe della forma c oppure ac
equivale alla grammatica N = M c!
M = ε | a
anche nelle parentesi quadre possiamo inserire alternative annidate N = [a | b] c produce stringhe della forma c oppure ac oppure bc equivale alla grammatica ! N = M c M = ε | a | b
21
![Page 22: GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONElaneve/html/lez1-SINTASSI.pdf · definire la grammatica, un insieme finito di regole che consentono di derivare solamente ed esattamente](https://reader031.fdocument.pub/reader031/viewer/2022021807/5be37f5109d3f2d7048b5669/html5/thumbnails/22.jpg)
EBNF – parentesi graffe
parentesi graffe { } : indicano 0, 1 o più occorrenze: N = {a} c
● produce stringhe della forma c, ac, aac, aaac...!● equivale alla grammatica N = M c!
M = ε | a M
anche con le parentesi graffe possiamo esprimere alternative annidate:
! ! ! ! ! N = {a | b} c
● produce stringhe della forma c, ac, bc, abc, bac, abac...
● equivale alla grammatica N = M c! M = ε | a M | b M
22
![Page 23: GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONElaneve/html/lez1-SINTASSI.pdf · definire la grammatica, un insieme finito di regole che consentono di derivare solamente ed esattamente](https://reader031.fdocument.pub/reader031/viewer/2022021807/5be37f5109d3f2d7048b5669/html5/thumbnails/23.jpg)
EBNF – esercizio 7
riprendiamo la grammatica BNF dell'Esercizio 1: !
N = NCIFRA | NCARATTERE NCIFRA! !! NCIFRA = CIFRA | CIFRA NCIFRA! !! NCARATTERE = CARATTERE | CARATTERE NCARATTERE! !! CIFRA = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9! !! CARATTERE = a | b | c | d | e | f | … | x | y | z!
!come la si può semplificare usando le parentesi?
23
![Page 24: GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONElaneve/html/lez1-SINTASSI.pdf · definire la grammatica, un insieme finito di regole che consentono di derivare solamente ed esattamente](https://reader031.fdocument.pub/reader031/viewer/2022021807/5be37f5109d3f2d7048b5669/html5/thumbnails/24.jpg)
EBNF – esercizio 8
la grammatica dell'Esercizio 3: ! N = COPPIA | COPPIA . COPPIA . N! !!COPPIA = CIFRA CARATTERE | CARATTERE CIFRA! !!CIFRA = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9! !!CARATTERE = a | b | c | d | e | f | … | x | y | z! !come la si può semplificare usando le parentesi?
24
![Page 25: GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONElaneve/html/lez1-SINTASSI.pdf · definire la grammatica, un insieme finito di regole che consentono di derivare solamente ed esattamente](https://reader031.fdocument.pub/reader031/viewer/2022021807/5be37f5109d3f2d7048b5669/html5/thumbnails/25.jpg)
EBNF – esercizio 9
la grammatica dell'Esercizio 4: ! N = a | b | aa | bb | a N a | b N b! !!
come si può semplificare usando le parentesi?
25
![Page 26: GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONElaneve/html/lez1-SINTASSI.pdf · definire la grammatica, un insieme finito di regole che consentono di derivare solamente ed esattamente](https://reader031.fdocument.pub/reader031/viewer/2022021807/5be37f5109d3f2d7048b5669/html5/thumbnails/26.jpg)
EBNF – Altri esercizi
quali linguaggi generano le seguenti grammatiche? 1. N = {a|b}!
2. N = {a}|{b}!
3. N = {a}{b}!
4. N = {a[b]}
26
![Page 27: GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONElaneve/html/lez1-SINTASSI.pdf · definire la grammatica, un insieme finito di regole che consentono di derivare solamente ed esattamente](https://reader031.fdocument.pub/reader031/viewer/2022021807/5be37f5109d3f2d7048b5669/html5/thumbnails/27.jpg)
27
grammatica/esercizi 1. la definizione dei naturali consente di derivare sequenze di cifre
del tipo 0000 oppure 001 – dare una definizione dei naturali in cui non è possibile derivare sequenze
come quelle di sopra – dare una definizione degli interi in cui non è possibile derivare +0 oppure –
0
2. un identificatore è una sequenza di lettere minuscole o maiuscole ed il simbolo “_” (underscore) e che non inizia con “_”
– definire la grammatica degli identificatori
3. un numero razionale è un numero con un punto “.” Con o senza segno e con o senza una parte decimale. La parte decimale è una sequenza di cifre.
– definire la grammatica dei numeri razionali