Sei sulla pagina 1di 17

In generale, con il termine di grammatica si intende un

formalismo che permette di definire un insieme di


stringhe mediante l’imposizione di un particolare
metodo per la loro costruzione. Tale costruzione si
effettua partendo da una stringa particolare e
riscrivendo via via parti di essa secondo una qualche
regola specificata nella grammatica stessa.
Le grammatiche formali generalmente studiate nel
contesto informatico sono denominate Grammatiche
di Chomsky perchè furono introdotte appunto dal
linguista Noam Chomsky con lo scopo di
rappresentare i procedimenti sintattici elementari
che sono alla base della costruzione di frasi della
lingua inglese. Pur essendosi presto rivelate uno
strumento inadeguato per lo studio del linguaggio
naturale, le grammatiche formali hanno un ruolo
fondamentale nello studio delle proprietà sintattiche
dei programmi e dei linguaggi di programmazione.
Grammatiche di tipo 3
Queste grammatiche, dette anche regolari, ammettono produzioni del
tipo:

Il termine “regolare” deriva dal fatto che tali linguaggi sono


rappresentabili per mezzo di espressioni regolari.
Le grammatiche regolari possono essere lineari destre o lineari
sinistre. Il termine “lineare” deriva dal fatto che al lato destro (o
sinistro) di ogni produzione compare al più un simbolo non terminale.
I linguaggi generabili da grammatiche di tipo 3 vengono detti
linguaggi di tipo 3 o regolari.
Esempio:

Grammatica lineare destra con P che contiene:

Grammatica lineare sinistra con P che contiene:

per ogni grammatica lineare destra ne esiste una lineare


sinistra equivalente e viceversa.
GERARCHIA DI CHOMSKY
GRAMMATICHE LINEARI

Si dice lineare una grammatica non contestuale in cui la parte destra


di ogni produzione contenga al pi`u un non terminale.

Le grammatiche di tipo 3 sono tutte grammatiche lineari: in particolare


esse sono lineari destre se le produzioni sono del tipo A  aB e lineari
sinistre se le produzioni sono del tipo A  Ba.

Grammatica lineare NON


regolare
ESEMPI

Esempio: V = {a,b,c,d} N = {A,S}

P = { S cAd;
A  bAb|a}

Grammatica di tipo context free

Derivazione per cbabb? Non esiste!

Derivazione per cbbbabbbd?

S  cAd  cbAbd  cbbAbbd  cbbbAbbbd  cbbbabbbd

Linguaggio generato da G: L(G) = {cbnabnd |n0}


ESERCIZI 1 COMPITINO aa 2002/2003

Dato il linguaggio L = {anbcdn | n 0} costruire una


grammatica che lo genera.

V = {a,b,c,d} N = {A,S} P = { S A;
A  aAd|bc}

E’ possibile utilizzare una grammatica regolare? Se si, dare la


sua definizione. NO
ESERCIZI 1 COMPITINO aa 2002/2003

Dato il linguaggio L = {anbcdm | n 0, m 0} costruire una


grammatica che lo genera.
V = {a,b,c,d} N = {A,S} P = { S A;
A  aAd|bc|aA|Ad}
P = {S  A
A aA|bc|Ad}
E’ possibile utilizzare una grammatica regolare? Se si, dare la
sua definizione. SI
SA
A  aA|bC
C  cD
D  dD|e
ESERCIZI 1 COMPITINO aa 2002/2003
Data la grammatica V = {x} N = {S,X,B}
P = S  xX Xx X  xB B  xX
A) di che tipo e’ la grammatica?
regolare, lineare a destra

B) mostrare una derivazione per xxxxx e una per xxxx


S  xX  xxB  xxxX  xxxx
Non esiste derivazione per xxxxx
C) qual’e’ il linguaggio generato? L(G) = {x2n |n>=1}
D) Esiste una grammatica context free che lo genera? Se si,
dare la sua definizione.
SX
X  xXx|xx
ESERCIZI 1 COMPITINO aa 2002/2003

Dato il linguaggio L = {abncdn | n 0} costruire una


grammatica che lo genera.

V = {a,b,c,d} N = {A,S}
P = { S aA;
A  bAd|c}

E’ possibile utilizzare una grammatica regolare? Se si, dare la


sua definizione.
NO
Esempio: V = {a,b} N = {A,S} S assioma

P = { S a|aA
A  a|b|aA|bA}

A) Di che tipo e’ la grammatica? regolare, lineare destra

B) Derivazione per baab? Questa stringa non e’ generabile

C) Derivazione per abba?

S  aA  abA  abbA  abba

Linguaggio generato da G: il linguaggio delle stringhe su


{a,b} che iniziano per a
ESERCIZIO

V = {a,b,c} N = {S,X} S assioma

P = { S X|e
A  aXa|bXb|c}

A) Di che tipo e’ la grammatica? context free

B) Derivazione per abcba?

S  X  aXa  abXba  abcba

Linguaggio generato da G: il linguaggio delle stringhe


palindrome su {a,b,c} con una e una sola c al centro, piu’ la
stringa vuota.
ESERCIZIO

Dato il linguaggio L = {anb2n | n > 0} costruire una grammatica


che lo genera.

V = {a,b} N = {S,X}

P = { S X;
X  aXbb|abb}
ESERCIZIO

V = {a,b,c} N = {S,A} S assioma

P = { S aSc|A
A  bAc|e}

Linguaggio generato da G?

L(G) = {anbmcn+m |n,m0}

Regole di produzione senza ricorsione su S:

N = {S,A,B} P = { S A
A  aAc|B
B  bBc|e}
ESERCIZIO

Il linguaggio L(G) = {anb |n  0} puo’ essere generato da


una grammatica regolare?

V = {a,b} N = {S,A} S assioma

P = { S Ab|b
A  Aa|a}
ESERCIZIO

Definire una grammatica che generi il linguaggio


L(G) = {anbn |n  0}

V = {a,b} N = {S,A} S assioma

P = { S A
A  aAb|ab}

Potrebbero piacerti anche