LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il...
-
Upload
fiorenza-del-prete -
Category
Documents
-
view
224 -
download
0
Transcript of LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il...
![Page 1: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/1.jpg)
LINGUAGGI DI PROGRAMMAZIONE
• Un linguaggio di programmazione ha due componenti ortogonali
• il linguaggio di Computazione • il linguaggio di Coordinazione
Linguaggi di computazione
Linguaggi di
coordinazione
Un particolare linguaggio di programmazione
![Page 2: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/2.jpg)
LINGUAGGI (DI COMPUTAZIONE)DI ALTO LIVELLO
Si basano su una macchina virtuale le cui “mosse” non sono quelle della macchina hardware.
![Page 3: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/3.jpg)
AN - 1995
Linguaggi di alto livello
Barriera di astrazione
Lisp
Cobol
Ada
Basic
C
Prolog
Fortran
Algol
Scheme
ML
Modula-2
Simula67Smalltalk
C++
Pascal
![Page 4: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/4.jpg)
AN - 1995
Linguaggi di alto livello
Barriera di astrazione
Lisp
Cobol
Ada
Basic
C
Prolog
Fortran
Algol
Scheme
ML
Modula-2
Simula67Smalltalk
C++
PascalImperativi
FunzionaliLogici
A oggetti
![Page 5: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/5.jpg)
AN - 1995
Evoluzione dei linguaggi
19601950 1970 1980 1990 2000
Linguaggi-macchina
FORTRANLISP
LISP
LISP
LISP
ALGOL
SIMULA67
SMALLTALKPROLOG
ADA C++
APL
ALGOLCOBOL
PASCAL
FORTRAN77
C
1945PlanKalcul
VISICALC
![Page 6: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/6.jpg)
AN - 1995
Evoluzione dei linguaggi
FORTRAN
BASICALGOL60
PASCAL
ADA
SIMULA67
SMALLTALK
C++
![Page 7: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/7.jpg)
AN - 1995
Le sorgenti dei linguaggi di programmazione
cpu
bus
i/orom ram
daticontrolloindirizzi
HARDWARE
ASTRAZIONE
LINGUAGGIIMPERATIVI
MACCHINADIVON NEUMANN
![Page 8: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/8.jpg)
AN - 1995
Le sorgenti dei linguaggi di programmazione
ASTRAZIONI LOGICO-MATEMATICHE
CONCRETIZZAZIONE
Prolog MLLinguaggiFunzionali
LinguaggiLogici
FUNZIONI
LOGICA DEL 1 ORDINE
cpu
bus
i/orom ram
daticontrolloindirizzi
![Page 9: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/9.jpg)
AN - 1995
Linguaggi di alto livello
Supportano concetti
Promuovono metodologie
Fungono da "ali" o "catene"
![Page 10: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/10.jpg)
COS’È UN LINGUAGGIO?
• Dice il dizionario:
“Un linguaggio è un insieme di parole e di metodi di combinazione delle parole usate e comprese da una comunità di persone.”
![Page 11: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/11.jpg)
COS’È UN LINGUAGGIO?
• Dice il dizionario:
“Un linguaggio è un insieme di parole e di metodi di combinazione delle parole usate e comprese da una comunità di persone.”
• È una definizione poco precisa: non evita le ambiguità dei linguaggi naturali non si presta a descrivere processi
computazionali meccanizzabili non aiuta a stabilire proprietà
![Page 12: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/12.jpg)
LA NOZIONE DI LINGUAGGIO
• Occorre una nozione di linguaggio più precisa
• Linguaggio come sistema matematico• che consenta di risponde a domande come:
quali sono le frasi lecite? si può stabilire se una frase appartiene al
linguaggio? come si stabilisce il significato di una frase? quali elementi linguistici primitivi ?
![Page 13: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/13.jpg)
LINGUAGGIO & PROGRAMMA
• Un linguaggio di programmazione è una notazione formale per descrivere algoritmi
• Un programma è la descrizione di un algoritmo in un particolare linguaggio di programmazione
![Page 14: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/14.jpg)
LINGUAGGIO & PROGRAMMA
• Un linguaggio di programmazione è una notazione formale per descrivere algoritmi
• Un programma è la descrizione di un algoritmo in un particolare linguaggio di programmazione
Quali “parole chiave” ? Quali meccanismi di combinazione ?
![Page 15: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/15.jpg)
SINTASSI & SEMANTICA
• Sintassi: l’insieme di regole formali per la scrittura di programmi in un linguaggio, che dettano le modalità per costruire frasi corrette nel linguaggio stesso.
• Semantica: l’insieme dei significati da attribuire alle frasi (sintatticamente corrette) costruite nel linguaggio.
![Page 16: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/16.jpg)
SINTASSI & SEMANTICA
• Sintassi: l’insieme di regole formali per la scrittura di programmi in un linguaggio, che dettano le modalità per costruire frasi corrette nel linguaggio stesso.
• Semantica: l’insieme dei significati da attribuire alle frasi (sintatticamente corrette) costruite nel linguaggio.
NB: una frase può essere sintatticamente corretta e tuttavia non avere significato!
![Page 17: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/17.jpg)
SINTASSI
Le regole sintattiche sono espresse attraverso notazioni formali: BNF (Backus-Naur Form) EBNF (Extended BNF) diagrammi sintattici
![Page 18: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/18.jpg)
SINTASSI EBNF: ESEMPIO
Sintassi di un numero naturale
<naturale> ::= 0 | <cifra-non-nulla>{<cifra>}
<cifra-non-nulla> ::= 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |9
<cifra> ::= 0 | <cifra-non-nulla>
![Page 19: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/19.jpg)
DIAGRAMMI SINTATTICI: ESEMPIO
Sintassi di un numero naturale
0
cifra-non-nulla
cifra
![Page 20: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/20.jpg)
SEMANTICA
La semantica è esprimibile: a parole (poco precisa e ambigua) mediante azioni semantica operazionale mediante funzioni matematiche
semantica denotazionale mediante formule logiche
semantica assiomatica
![Page 21: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/21.jpg)
DEFINIZIONE DI LINGUAGGIO
Un linguaggio è un insieme di frasi Una frase è una sequenza di simboli
appartenenti a un certo alfabeto
Proprietà desiderabili: Un linguaggio deve essere
effettivamente generabile Un linguaggio di programmazione deve
essere decidibile
![Page 22: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/22.jpg)
ALCUNE DEFINIZIONI
Alfabeto V (o vocabolario o lessico)• È l’insieme dei simboli con cui si
costruiscono le frasi
Universo linguistico V* di un alfabeto V• È l’insieme di tutte le frasi (sequenze
finite di lunghezza arbitraria) di elementi di V.
Linguaggio L su un alfabeto V• È un sottoinsieme di V*.
![Page 23: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/23.jpg)
ESEMPIO
V = { if, else, ==, A, 0, =, +, 1, 2, (, ) }
Allora:
V* = {
if (A == 0) A = A + 2,
if else A,
do =A,
...
}
![Page 24: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/24.jpg)
ESEMPIO
V = { if, else, ==, A, 0, =, +, 1, 2, (, ) }
Allora:
V* = {
if (A == 0) A = A + 2,
if else A,
do =A,
...
}
Non tutte queste frasi faranno parte del linguaggio!
![Page 25: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/25.jpg)
LINGUAGGI & GRAMMATICHE
Problema:• Come specificare il sottoinsieme di V*
che definisce il linguaggio?
![Page 26: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/26.jpg)
LINGUAGGI & GRAMMATICHE
Problema:• Come specificare il sottoinsieme di V*
che definisce il linguaggio?
Risposta:• Specificando il modo formale e preciso
la sintassi delle frasi del linguaggio
![Page 27: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/27.jpg)
GRAMMATICA FORMALE
Una Grammatica Formale è una notazione matematica
che consente di esprimere in modo rigoroso la sintassi di un linguaggio.
![Page 28: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/28.jpg)
GRAMMATICA FORMALE
Una quadrupla VT,VN,P,S dove: VT è un insieme finito di simboli terminali VN è un insieme finito di simboli non
terminali P è un insieme finito di produzioni, ossia
di regole di riscrittura S è un particolare simbolo non-terminale
detto simbolo iniziale o scopo della grammatica.
![Page 29: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/29.jpg)
GRAMMATICA B.N.F.
Una Grammatica B.N.F. è una grammaticain cui le produzioni hanno la forma
X ::= Adove: X VN è un simbolo non terminale, e: A è una stringa, ossia una sequenza di
simboli ciascuno appartenente all’alfabeto V = VN VT.
![Page 30: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/30.jpg)
GRAMMATICA & LINGUAGGIO
Una Grammatica B.N.F. definisce quindi un linguaggio sull’alfabeto terminale VT mediante un meccanismo di derivazione (o riscrittura) .
![Page 31: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/31.jpg)
GRAMMATICA & LINGUAGGIO
Data una grammatica G, si dice perciòLinguaggio LG generato da G
l’insieme delle frasi di V • derivabili dal simbolo iniziale S• applicando le produzioni P
Le frasi di un linguaggio di programma-zione vengono dette programmi di tale linguaggio.
![Page 32: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/32.jpg)
DERIVAZIONE
Siano• G una grammatica• , due stringhe, cioè due elementi dell’universo linguistico (VNVT)*.
Si dice che deriva direttamente da (e si scrive )
se• le stringhe si possono decomporre in
= A = • ed esiste la produzione A::=
![Page 33: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/33.jpg)
DERIVAZIONE
Si dice che, in generale, deriva da se• esiste una sequenza di N derivazioni dirette che da possono infine produrre
n =
![Page 34: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/34.jpg)
FORMA B.N.F. COMPATTA
• In una grammatica BNF spesso esistono più regole con la stessa parte sinistra:
– X ::= A1
– ....
– X ::= AN
• Per comodità si stabilisce allora di poterle compattare in un’unica regola:
X ::= A1 | A2 | .. | AN
• dove il simbolo | indica l’alternativa.
![Page 35: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/35.jpg)
UN ESEMPIO COMPLESSIVO
G = VT,VN,P,S
dove:
VT = { il, gatto, topo, sasso, mangia, beve }
VN = { <frase>, <soggetto>, <verbo>, <compl-ogg>, <articolo>, <nome> }
S = <frase>
P = ...
![Page 36: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/36.jpg)
UN ESEMPIO COMPLESSIVO
P = {
<frase> ::= <soggetto> <verbo> <compl-ogg>
<soggetto> ::= <articolo><nome>
<articolo> ::= il
<nome> ::= gatto | topo | sasso
<verbo> ::= mangia | beve
<compl-ogg> ::= <articolo> <nome>
}
![Page 37: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/37.jpg)
UN ESEMPIO COMPLESSIVO
ESEMPIO: derivazione della frase
“il gatto mangia il topo”
(ammesso che tale frase sia derivabile, ossia faccia parte del linguaggio generato dalla nostra grammatica)
DERIVAZIONE “LEFT-MOST”• A partire dallo scopo della grammatica, si
riscrive sempre il simbolo non-terminale più a sinistra.
![Page 38: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/38.jpg)
UN ESEMPIO COMPLESSIVO
<frase><soggetto> <verbo> <compl-ogg><articolo> <nome> <verbo> <compl-ogg>il <nome> <verbo> <compl-ogg> il gatto <verbo> <compl-ogg> il gatto mangia <compl-ogg> il gatto mangia <articolo><nome>
il gatto mangia il <nome> il gatto mangia il topo
![Page 39: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/39.jpg)
UN ESEMPIO COMPLESSIVO
ALBERO SINTATTICO• un grafo che esprime il processo di
derivazione di una frase usando una data grammatica.
ESEMPIO: derivazione della frase
“il gatto mangia il topo”
(ammesso che tale frase sia derivabile, ossia faccia parte del linguaggio generato dalla nostra grammatica)
![Page 40: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/40.jpg)
UN ESEMPIO COMPLESSIVO
frase
soggetto verbo compl-ogg
articolo nome mangia articolo nome
il gatto il topo
![Page 41: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/41.jpg)
EXTENDED B.N.F. (ENBF)
• Una forma estesa della notazione B.N.F.• che introduce alcune notazioni compatte
per alleggerire la scrittura delle regole di produzione
Forma EBNF BNF equivalente significato
X ::= [a] B X ::= B | aB a può comparire0 o 1 volta
X ::= {a}n B X ::= B | aB | …| anB a può comparireda 0 a n volte
X ::= {a} B X ::= B | aX a può comparire0 o più volte
NOTA: la produzione X ::= B | aX è ricorsiva (a destra).
![Page 42: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/42.jpg)
EXTENDED B.N.F. (ENBF)
• Per raggruppare categorie sintattiche:
Forma EBNF BNF equivalente significato
X ::= (a | b ) D | c X ::= a D | b D | c raggruppa cate-gorie sintattiche
![Page 43: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/43.jpg)
ESEMPIO 1: NUMERI NATURALI
G = VT,VN,P,S
dove:
VT = { 0,1,2,3,4,5,6,7,8,9 }
VN = { <num>, <cifra>, <cifra-non-nulla> }
S = <num>
P = {<num> ::= <cifra> | <cifra-non-nulla> {<cifra>}<cifra> ::= 0 | <cifra-non-nulla><cifra-non-nulla> ::= 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
}
![Page 44: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/44.jpg)
ESEMPIO 2: NUMERI INTERI
• Sintassi analoga alla precedente
• ma con la possibilità di un segno (+,-) davanti al numero naturale
Quindi:
• stesse regole di produzionepiù una per gestire il segno
• stesso alfabeto terminalepiù i due simboli + e -
![Page 45: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/45.jpg)
ESEMPIO 2: NUMERI INTERI
G = VT,VN,P,S, dove:
VT = { 0,1,2,3,4,5,6,7,8,9,+,- }
VN = {<int>, <num>, <cifra>, <cifra-non-nulla> }
P = {
<int> ::= [+|-] <num>
<num> ::= 0 | <cifra-non-nulla> {<cifra>}
<cifra> ::= 0 | <cifra-non-nulla>
<cifra-non-nulla> ::= 1|2|3|4|5|6|7|8|9}
![Page 46: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/46.jpg)
ESEMPIO 3: IDENTIFICATORI
G = VT,VN,P,S
• Nell’uso pratico, quasi sempre si danno solo le regole di produzione, definendo VT, VN e S implicitamente.
• Quindi:
P = {
<id> ::= <lettera> { <lettera> | <cifra>}
<lettera> ::= A | B | C | D | ... | Z
<cifra> ::= 0|1|2|3|4|5|6|7|8|9}
![Page 47: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/47.jpg)
ESEMPIO 3: IDENTIFICATORI
G = VT,VN,P,S
• Nell’uso pratico, quasi sempre si danno solo le regole di produzione, definendo VT, VN e S implicitamente.
• Quindi:
P = {
<id> ::= <lettera> { <lettera> | <cifra>}
<lettera> ::= A | B | C | D | ... | Z
<cifra> ::= 0|1|2|3|4|5|6|7|8|9}
scopo VN VN
VT
VT
![Page 48: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/48.jpg)
DIAGRAMMI SINTATTICI<intero>::=
<num>
<num>::= 0
<cifra-non-nulla>
<cifra>
-
+
<id>::= <lettera>
<lettera>
<cifra>
![Page 49: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/49.jpg)
ESEMPIO DI ALBERO SINTATTICO
• Albero sintattico del numero -3457 (grammatica EBNF dell’esempio 2)
• Attenzionepoiché X ::= {a} B equivale a X ::= B | aX,
e X ::= C {a} equivale a X ::= C | Xa,
la regola:
<num> ::= <cifra-non-nulla> {<cifra>}
equivale a:
<num> ::= <cifra-non-nulla> | <num> <cifra>
![Page 50: LINGUAGGI DI PROGRAMMAZIONE Un linguaggio di programmazione ha due componenti ortogonali il linguaggio di Computazione il linguaggio di Coordinazione Linguaggi.](https://reader034.fdocument.pub/reader034/viewer/2022052504/5542eb5a497959361e8c67b4/html5/thumbnails/50.jpg)
ALBERO SINTATTICO DI -3457
<int>
- <num>
<num> <cifra>
7
<num> <cifra>
5
<num> <cifra>
4
<cifra-non-nulla>
3
<cifra-non-nulla>
<cifra-non-nulla>
<cifra-non-nulla>