Documente Academic
Documente Profesional
Documente Cultură
6
6 noiembrie 2008
Capitolul III
1. Gramatici
După cum vom vedea în capitolul următor, maşinile au fost concepute iniţial ca
instrumente de recunoaştere şi acceptare a limbajelor. Gramaticile, în schimb, sunt
instrumente de generare a cuvintelor care aparţin unui limbaj. Motivaţia conceptului de
gramatică provine din lingvistică. Pentru învăţarea unui limbaj, trebuie să învăţăm, în
primul rând, două lucruri: vocabularul limbajului şi regulile de aşezare a cuvintelor din
vocabular.
Pe această idee s-a mers şi în cazul conceperii unui limbaj de programare.
1.1 Observaţii.
i) În orice regulă u → v , u conţine cel putin un simbol neterminal
ii) Atragem atenţia încă o dată că ( N + Σ) înseamnă ( N ∪ Σ) în teoria
mulţimilor.
1.2 Definiţie. Se numeşte relaţie de derivare directă peste ( N + Σ)* relaţia notată
cu “⇒G” definită prin:
w⇒G w' dacă (∃) u → v ∈ P astfel încât w = xuy şi w' = xvy.
Cu alte cuvinte, w şi w' sunt în relaţie de derivare directă dacă w' se obţine din w
prin înlocuirea membrului stâng al unei reguli cu membrul drept al regulii. Pentru
a putea pune în evidenţă limbajul generat de gramatica G (care este limbaj peste
alfabetul terminalilor, Σ ) mai avem nevoie şi de:
1.2 Observaţii :
1) Din definiţie este clar că w⇒G* w' dacă şi numai dacă w = w' sau există şirul
de cuvinte din ( N + Σ ) * , w1 = w, w2,…, wn = w' (n ≥ 2) astfel încât
wi ⇒ G wi +1 , (∀)i ∈ 1, n − 1.
2) Dacă w ⇒ G w' sau w = w', şirul de cuvinte de mai sus este numit derivare în
Să exemplificăm :
1.2 Exemplu.
Fie G = ({s0}, {a,b}, P, s0) unde P = {s0 → as0b, s0 → ε}. Puteam să fi
scris, de exemplu, P : s0 → as0b | ε, “|” însemnând “sau”.
Să demonstrăm că L(G) = L', unde L' = {anbn| n∈N}.
Vom demonstra aceasta in doua etape:
I. Fie M = {w∈(N + Σ )*| (∃)s0 ⇒* w}şi M '={w∈(N +Σ)* | (∃)n∈N : w = ans0bn
sau w= anbn }.
Pentru a demonstra că M = M ' vom arăta dubla incluziune, adică M ⊆ M ' şi
M ⊇ M'.
“⊇”: Fie w ∈ M '. Avem două cazuri:
1) w = a n s0 b n , n ≥ 0.
Dacă n = 0, atunci w = s0 pentru care avem derivarea de lungime 0
s 0 ⇒ * s 0 deci w ∈ M .
2) w = a n b n , n ≥ 0.
Dacă n = 0, w = ε şi avem derivarea s0 ⇒ *ε prin aplicarea regulii
s0 → ε . Aşadar w∈ M .
unde w∈ M .
“⊆”: Vom demonstra că M ⊆ M ' prin inducţie.
Fie P(n) propoziţia care afirmă: “(∀)n ∈N şi (∀) s0⇒* w cu l(s0⇒* w) = n
atunci w ∈ M '”.
P(0): w = s0 = a0s0b0, deci P(0) este adevărată.
Presupunem că P(k) este adevărată şi fie s 0 ⇒ * w cu l ( s 0 ⇒ * w) = k + 1. Vom
l ( s 0 ⇒ *w' ) =k, conform ipotezei inductive, w'∈ M '. Deoarece w' ⇒ w este
derivare de lungime 1, trebuie să putem aplica o singură regulă din P; aşadar w'
trebuie să conţină şi simboluri neterminale. Rezultă că w'= aks0bk, de unde w=
ak+1s0bk+1 (prin aplicarea primei reguli) sau w = akbk (prin aplicarea regulii
“ s0 → ε . ”). În ambele cazuri w ∈ M ' deci P(k+1) adevărată.
Conform principiului inducţiei matematice vom avea atunci că P(n) este adevărată
pentru orice n∈N, deci M ⊆ M ' .
II Conform etapei I, singurele cuvinte din Σ * care se pot obţine printr-o
derivare din s0 sunt de forma anbn, n ≥ 0, deci L(G) ⊆ L'. Pe de altă parte, orice
cuvânt de forma a n b n , n ≥ 0, se poate obţine printr-o derivare din s0, şi
obţinem şi cealaltă incluziune L' ⊆ L(G). Aşadar L' = L(G).
numesc echivalente dacă ele generează acelaşi limbaj (adică L(G1) = L(G2)).
De multe ori suntem interesati de legăturile existente între limbajele
generate de două gramatici distincte. Întrucât, pentru comparatie, limbajele
generate ar trebui să fie formate din cuvinte peste un acelaşi alfabet, nu
restrângem cu nimic generalitatea dacă presupunem că gramaticile au acelaşi
alfabet al terminalilor.
Mai mult, se poate presupune că alfabetele neterminalilor sunt disjuncte.
Pentru aceasta, să demonstrăm următoarea :
w∈Σ *.
v) Un limbaj L este de tip n, n ∈{0,1,2,3} dacă există o gramatică G de tip n
care să-l genereze (adică L = L(G)).
1.3 Observaţii. Să notăm prin Ln clasa limbajelor de tipul n. Este clar că L1 ⊆ L 0
1.1 Teoremă L f ⊆ L 3
P = ( s 0 → w1 , s 0 → w2 ,..., s 0 → wn }.
2. Proprietăţi la închidere
2.1 Teoremă. Oricare dintre familiile de limbaje L n , n ∈ 0,3 este închisă la sumă.
Demonstraţie. Aşadar, trebuie să demonstrăm că, dacă n ∈ 0,3 şi L1, L2 ∈ Ln, atunci
se vor aplica numai reguli din P1, de unde rezultă că există derivarea
s 01 ⇒ *G1 w deci w ∈ L1 . În mod analog, dacă am fi presupus că derivarea considerată