Programmazione + Laboratorio
Docente: Marco de Gemmis
Capitolo 2 Grammatiche e
Linguaggi
2/51
Corso di Linguaggi di Programmazione + Laboratorio
Definizione di Alfabeto
Un insieme X finito e non vuoto di simboli un
alfabeto.
Esempi
Lalfabeto latino, con laggiunta dei simboli di
interpunzione e dello spazio bianco: a b c z ; , . :
Linsieme delle dieci cifre arabe: 0 1 9
Con i simboli primitivi dellalfabeto si formano le
parole (es.: abc, 127, casa,).
3/51
Corso di Linguaggi di Programmazione + Laboratorio
Definizione di Parola o Stringa
Una sequenza finita di simboli x1 x2 ...xn , dove ogni
xi preso da uno stesso alfabeto X una parola
(su X).
Esempio
X = {0,1}.
001110 una parola su X
Una parola ottenuta giustapponendo o
concatenando simboli (caratteri) dellalfabeto.
Se una stringa ha m simboli (non necessariamente
distinti) allora diciamo che ha lunghezza m.
4/51
Corso di Linguaggi di Programmazione + Laboratorio
Lunghezza di una Parola o Stringa
La lunghezza di una stringa w denotata con |w|.
Le parole di lunghezza 1 sono i simboli di X.
Quindi 001110 una parola di lunghezza 6
001110 = 6
5/51
Corso di Linguaggi di Programmazione + Laboratorio
Definizioni
Uguaglianza tra stringhe
Due stringhe sono uguali se i loro caratteri, letti
ordinatamente da sinistra a destra, coincidono.
X*
Linsieme di tutte le stringhe di lunghezza finita
sullalfabeto X si denota con X*.
Esempio
Se X = {0,1}, allora X = { , 0, 1, 00, 01, 10, 11,...}
X* ha un numero di elementi che un infinito
numerabile.
Dalla definizione, segue che X*, per ogni
insieme X.
6/51
Corso di Linguaggi di Programmazione + Laboratorio
Definizioni
Concatenazione o prodotto
Sia X* una stringa di lunghezza m e X* una
stringa di lunghezza n, la concatenazione di e ,
denotata con o , definita come la stringa di
lunghezza m+n, i cui primi m simboli costituiscono
una stringa uguale a ed i cui ultimi n simboli
costituiscono una stringa uguale a .
Quindi se = x1 x2 ...xm e = x1 x2 ...xn , si ha:
= x1 x2 ...xm x1 x2 ...xn
Se X = alfabeto latino
= capo = stazione = capostazione
7/51
Corso di Linguaggi di Programmazione + Laboratorio
Operazione di concatenazione
La concatenazione di stringhe su X una
operazione binaria su X*:
: X X X
associativa: ( ) = ( ) = , , , X
non commutativa: , X :
capostazione stazionecapo
ha elemento neutro : = = , X *
8/51
Corso di Linguaggi di Programmazione + Laboratorio
Osservazione
In base alla definizione di prodotto, ogni parola non
vuota = x1 x2 ...xn si pu scrivere in uno ed un solo
modo come prodotto di parole di lunghezza 1, cio
di elementi di X.
Ci si esprime dicendo che:
(X , )
il monoide libero generato dallinsieme X.
9/51
Corso di Linguaggi di Programmazione + Laboratorio
Definizioni
Prefisso, Suffisso
Se X della forma = , ove , X ,
allora un prefisso di e un suffisso di .
Sottostringa
Se , X e della forma = , ove , X
se h = 0
h
= h 1
altrimenti
con h=0, 1, 2,
La potenza h-esima di una stringa un caso
speciale di concatenamento (in quanto la si ottiene
concatenando una stringa h volte con se stessa).
11/51
Corso di Linguaggi di Programmazione + Laboratorio
Definizioni
Potenza di un alfabeto
Sia X un alfabeto, poniamo:
1
1) X = X
2
2) X = {x1 x2 | x1 , x2 X , x1 x2 x1 x2 }
3 2
3) X = { x x x
1 2 3 | x x
1 2 X , x3 X , x1 x2 x3 x1 x2 x3}
..)
X i = {x1 x2 ...xi 1 xi | x1 x2 ...xi 1 X i 1 , xi X , x1 x2 ...xi x1 x2 ...xi 1 xi }
i)
12/51
Corso di Linguaggi di Programmazione + Laboratorio
Definizioni
Potenza di un alfabeto
Se i2 si ha:
+
X + = X X 2 ... X i ... = Xi
i= 1
+
Se la parola vuota e prendiamo un w X tale
che w = w = w si ha:
+
X = { } X
Inoltre si ha:
{ } se h = 0
X =
h
h 1
XX altrimenti
13/51
Corso di Linguaggi di Programmazione + Laboratorio
Definizioni
Linguaggio formale
Un linguaggio formale L su un alfabeto X un
sottoinsieme di X*.
L X
Esempio:
Il linguaggio delle parentesi ben formate un
linguaggio formale in quanto, denotato con M tale
linguaggio, si ha:
M { (,)} *
16/51
Corso di Linguaggi di Programmazione + Laboratorio
Generazione e riconoscimento di linguaggi formali
17/51
Corso di Linguaggi di Programmazione + Laboratorio
Generazione di linguaggi formali
Esempio
Non possibile elencare tutti i teoremi della teoria
dei gruppi, perch sono infiniti i teoremi realizzabili
combinando quelli noti.
Un libro di teoria dei gruppi non lelencazione dei
teoremi, ma fornisce una serie di assiomi e le regole
con le quali, a partire dagli assiomi, possibile
costruire tutti i teoremi della teoria dei gruppi.
Per descrivere la regola di produzione di un
linguaggio, utilizzeremo una notazione insiemistica.
18/51
Corso di Linguaggi di Programmazione + Laboratorio
Generazione di linguaggi formali
Esempio
Sia L il linguaggio su X = {0} costituito da tutte e sole
le stringhe che hanno un numero pari di 0, cio:
{
L = { } w n | w = 00, n = 1,2,... }
19/51
Corso di Linguaggi di Programmazione + Laboratorio
Generazione e riconoscimento di linguaggi formali
20/51
Corso di Linguaggi di Programmazione + Laboratorio
Riconoscimento di linguaggi formali
Esempio
Lesecuzione di un programma errato
sintatticamente viene inibita. Questo indice
dellesistenza di una macchinetta che stabilisce se
il programma appartiene o no allinsieme dei
programmi sintatticamente ben costruiti.
21/51
Corso di Linguaggi di Programmazione + Laboratorio
Generazione di linguaggi formali: esempio
Sia dato lalfabeto: X = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, + , }
Voglio generare il linguaggio L dei numeri interi
relativi. Ovviamente: L X
Pi precisamente, L X poich, ad esempio,
1+ + 5 L
Non possiamo elencare gli elementi di L. Cerchiamo
dunque una serie di regole mediante le quali
possibile produrre tutti e soli gli elementi di L.
Assumiamo, per semplicit, che un numero relativo
sia costituito da una serie di cifre precedute da + o -.
22/51
Corso di Linguaggi di Programmazione + Laboratorio
Generazione di linguaggi formali: esempio
Adottiamo la BNF per descrivere le produzioni:
< S > ::= + < I > | < I >
< I > ::= < D > | < I > < D >
< D > ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Queste regole generano tutti gli interi relativi purch partiamo dal
simbolo nonterminale S.
I il simbolo nonterminale (da ora in poi, talvolta abbreviato in
NT), anche detto categoria sintattica, che sta ad indicare (e da
cui si genera) la classe dei numeri interi.
I definito ricorsivamente o come una cifra oppure come un
intero seguito da una cifra.
Ogni intero relativo generato da queste regole e niente che non
sia un intero relativo pu essere generato da queste regole.
23/51
Corso di Linguaggi di Programmazione + Laboratorio
Generazione di linguaggi formali: esempio
S
Generazione ad albero:
proviamo a generare lintero relativo -375
I
Tale albero prende il nome di
albero di derivazione.
*
S 375 375 L I D
Nella notazione vista per il linguaggio delle
parentesi ben formate, tipica per i linguaggi 5
formali, la grammatica diventa: I D
S+I|I
ID|ID D 7
D0|1|2|3|4|5|6|7|8|9
Corso di Linguaggi di Programmazione + Laboratorio
3 24/51
Grammatiche generative
Dagli esempi di linguaggi visti, possiamo trarre le seguenti
conclusioni. Per generare un linguaggio sono necessari:
un insieme X di simboli primitivi con cui si formano le parole del
linguaggio, detto alfabeto dei simboli terminali o alfabeto
terminale;
un insieme V di simboli ausiliari o variabili con cui si identificano
le categorie sintattiche del linguaggio, detto alfabeto dei simboli
nonterminali (ausiliari) o alfabeto nonterminale o alfabeto delle
variabili;
un simbolo speciale S, scelto tra i nonterminali, da cui far partire
la generazione delle parole del linguaggio. Tale simbolo detto
assioma o scopo o simbolo distintivo o simbolo di partenza o
simbolo iniziale;
un insieme P di produzioni, espresse in un formalismo quali
regole di riscrittura, BNF (a::=b), carte sintattiche,
25/51
Corso di Linguaggi di Programmazione + Laboratorio
Definizione di Grammatica generativa o a struttura
di frase
Una grammatica generativa o a struttura di frase G
una quadrupla
G=(X,V,S,P)
ove:
X lalfabeto terminale per la grammatica;
V lalfabeto nonterminale o delle variabili per la
grammatica;
S il simbolo di partenza per la grammatica;
P linsieme delle produzioni della grammatica
ed inoltre valgono le seguenti condizioni:
X V = e S V
26/51
Corso di Linguaggi di Programmazione + Laboratorio
Definizione di Produzione
Una produzione una coppia (v,w),
+ * *
ove v ( X V ) e v contiene un NT v ( X V ) V ( X V )
w ( X V ) (w pu essere anche ).
Un elemento (v,w) di P viene comunemente scritto nella
forma:
v w
Una produzione deve, in qualche modo, riscrivere un NT.
27/51
Corso di Linguaggi di Programmazione + Laboratorio
Definizione di Produzione
Per convenzione, gli elementi di X sono
rappresentati di solito con lettere minuscole (con o
senza pedici e di solito sono le prime lettere
dellalfabeto) o cifre ed operatori (connettivi), mentre
gli elementi di V sono rappresentati con lettere
maiuscole (con o senza pedici) o con stringhe
delimitate dalle parentesi angolari < e >.
La notazione 1 | 2 || k impiegata come
abbreviazione della seguente:
1
2
k
Corso di Linguaggi di Programmazione + Laboratorio
28/51
Esempi di grammatiche
La grammatica per il linguaggio delle parentesi ben
formate
G1 = ({ ( , ) }, {S }, S , {S ( ), S ( S ), S SS })
29/51
Corso di Linguaggi di Programmazione + Laboratorio
Definizione di derivazione o produzione diretta
2) Scriviamo
y z
e diciamo che y produce z o che z derivabile da
y se y=z o esiste una sequenza di stringhe
w1 , w2 ,..., wn , con w1 , w2 ,..., wn 1 ( X V ) + , wn ( X V )*
w1=y e wn=z tali che i, i = 1,2,..., n 1 : wi wi + 1
G
(wi produce direttamente wi+1), cio:
y= z
y z oppure
w = y w w ... w w = z
1 2 3 n 1 n
31/51
Corso di Linguaggi di Programmazione + Laboratorio
Osservazione
La nozione di derivazione diretta stabilisce una
relazione binaria in ( X V ) .
Date due stringhe y e z, il simbolo pu esserci o
meno; dipende dallesistenza di una produzione.
Allora possiamo anche definire una composizione di
relazioni:
2 def
y z w: y w e w z
dove 2 il numero di trascrizioni necessarie per
passare da y a z (ossia, la lunghezza della
derivazione).
32/51
Corso di Linguaggi di Programmazione + Laboratorio
Osservazione
2 3
Da ci si ha: = I
n
ove I la relazione identica e indica la
composizione della relazione nvolte con se stessa.
la chiusura riflessiva e transitiva della
relazione di derivazione diretta;
+
la chiusura transitiva della stessa relazione.
33/51
Corso di Linguaggi di Programmazione + Laboratorio
Definizione di linguaggio generato da una
grammatica
Sia G=(X,V,S,P) una grammatica. Il linguaggio
generato da G, denotato con L(G), linsieme delle
stringhe di terminali derivabili dal simbolo di partenza
S.
L(G ) = w X S w
G
Sono, dunque, stringhe di L(G) le stringhe che:
consistono di soli terminali;
possono essere derivate da S in G.
34/51
Corso di Linguaggi di Programmazione + Laboratorio
Definizione di forma di frase
35/51
Corso di Linguaggi di Programmazione + Laboratorio
Definizione di grammatiche equivalenti
L(G)=L(G)
36/51
Corso di Linguaggi di Programmazione + Laboratorio
Esempio
40/51
Corso di Linguaggi di Programmazione + Laboratorio
Esempio
aaaA...
)
(3
aaA
(4
)
)
(3
aA aaaL(G)
(4
)
aaL(G)
)
A
(3
(4
)
aL(G)
)
(1
S
{ } { }
bB...
L( G ) = a n n > 0 b n n > 0
(2
)
)
(5
B
(6
)
bL(G)
41/51
Corso di Linguaggi di Programmazione + Laboratorio
Osservazione
42/51
Corso di Linguaggi di Programmazione + Laboratorio
Osservazione
43/51
Corso di Linguaggi di Programmazione + Laboratorio
Osservazione
44/51
Corso di Linguaggi di Programmazione + Laboratorio
Osservazione
45/51
Corso di Linguaggi di Programmazione + Laboratorio
Osservazione
47/51
Corso di Linguaggi di Programmazione + Laboratorio
Esercizi
L = {a nb n | n > 0}
e dimostrare questo risultato.
48/51
Corso di Linguaggi di Programmazione + Laboratorio
Esercizi
L = {a n b 2 n | n > 0}
e dimostrare questo risultato.
49/51
Corso di Linguaggi di Programmazione + Laboratorio
Esercizi
50/51
Corso di Linguaggi di Programmazione + Laboratorio
Esercizi
G = ( X ,V , S , P )
X = {a, b, c} V = {S , A, B}
(1) ( 2) ( 3) ( 4 ) (5) ( 6 )
P = S aBS | bA, aB Ac | a , bA S | Ba
Soluzione esercizio
51/51
Corso di Linguaggi di Programmazione + Laboratorio