27
1 GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONE Cosimo Laneve

GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONElaneve/html/lez1-SINTASSI.pdf · definire la grammatica, un insieme finito di regole che consentono di derivare solamente ed esattamente

  • Upload
    dinhdat

  • View
    223

  • Download
    0

Embed Size (px)

Citation preview

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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