Documente Academic
Documente Profesional
Documente Cultură
LIMBAJE FORMALE
IF (IND.EQ.1) N = N + 1 (1.1)
IF (IND.EQ.1) N = (1.2)
110.
b) L2 = Toate şirurile de 0 şi 1 cu un număr egal de 0-uri şi 1-uri.
Aşadar, 010011 şi 1010 sunt în limbajul L2 , în timp ce 110 şi 010
nu. Evident că limbajul L2 (spre deosebire de L1 ) conţine un număr infinit
de propoziţii.
Pe parcursul acestei lucrări vom folosi deseori şiruri de simboluri.
Fapt pentru care folosim următoarele convenţii de notaţie. Dacă
σ = x1 x2 ...xn şi τ = y1 y2 ... ym sunt două şiruri, atunci concatenarea lor, notată
lungime.
Definiţia 1.3. Fie Σ o mulţime nevidă. Limbajul tuturor şirurilor
finite de elemente din Σ (inclusiv şirul vid) se notează cu Σ* . Limbajul
tuturor şirurilor nevide de elemente din Σ se notează Σ + .
A → X 1 X 2 ... X n ,
B → bC C → ac C →λ
σ ⇒τ
Fie gramatica G = {Σ, N , S , P} din exemplul 1.2. Forma
σ = aBabC ⇒ abCabC
σ = aaCba ⇒ aaba
„dispare”.
σ 1 ⇒ τ1 ⇒ τ 2 ⇒ ... ⇒ τ n ⇒ σ 2 .
σ 1 ⇒ *σ 2
În exemplul 1.2. avem S ⇒ *aabC deoarece
L(G ) = {σ | σ ∈ Σ* , S ⇒ *σ } .
S ⇒ B ⇒ bC ⇒ b
S ⇒ AaB ⇒ aaB ⇒ aabC ⇒ aabac
S ⇒ B ⇒ bC ⇒ bac
1. E → E + T
2. E → T
3. T → T * F
4. T → F
5. F → ( E )
6. F → a
2 3 4 5 1
E ⇒ T ⇒ T * F ⇒ F * F ⇒( E ) * F ⇒ ( E + T ) * F
2 4 6
⇒(T + T ) * F ⇒( F + T ) * F ⇒(a + T ) * F
4 6 6
⇒( a + F ) * F ⇒( a + a ) * F ⇒ ( a + a ) * a
A → α1
A → α2
M
A → αk
A → α1 | α 2 | L | α k −1 | α k .
S → AaB | B
A → a | aB
B → bC
C → ac | λ
S → AB
A → BSB | BB |1
B → 0 A1| 0 | λ
S → AB
A → BSB
A → BB
A →1
B → 0 A1
B→0
B→λ
S → AB
A → XD
B → EXI | λ
D → .I | I . | I .I | I
X →+|−|λ
I → M | MI
M → 0 |1| 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
u→v
producţiilor dată de
1. S → aXYc
2. aX → cad
3. Xc → aXa
4. XYc → Xcc
5. Yc → λ
sau
α Aβ → ασβ
S →λ A → aB A→a.
1. E → E + T 3. T → T * F 5. F → ( E )
2. E → T 4. T → F 6. F → a
T 3
T 4 * 0 F 6
F 5 4 0
( 0 E 1 ) 0
E 2 + 0 T 4
T 4 F 6
F 6 3 0
5 0
X if n = 0
V ( LeftChild ( X , n)) + V ( RightChild ( X , n)) if n = 1
V ( X , n) = V (Child ( X , n) if n = 2, 4, sau 6
V ( LeftChild ( X , n)) *V ( RightChild ( X , n)) if n = 3
V ( MiddleChild ( X , n) if n = 5
Funcţia V ( X , n) este deci definită pentru acei X şi n pentru care X | n
V ( Root ) = V ( E , 2)
= V (T ,3)
= V (T , 4) *V ( F , 6)
= V ( F ,5) *V (4, 0)
= V ( E ,1) * 4
= (V ( E , 2) + V (T , 4)) * 4
= (V (T , 4) + V ( F , 6)) * 4
= (V ( F , 6) + V (3, 0)) * 4
= (V (5, 0) + 3) * 4
= (V (5, 0) + 3) * 4
= (5 + 3) * 4 = 32
S→A A → A0 A |1
Figura 1.7. arată doi arbori de derivare distincţi pentru şirul σ = 10101 .
< statement > → if < condition > then < statement > |
if < condition > then < statement > else < statement > | (1.3)
< other kind of statement >
(b) <statement>
if D=1 then A := 3
S → 0 A0
A→ S |λ
şi gramatica G '
S → 0B
B → 0S | 0
opus lui
if C = 0 then (if D = 1 then A := 3) else A := 4
L = {a k b k c m d n | k , l , m şi n ≥ 1, cu (k = 1 şi m = n) sau (k = n şi l = m)} .
1. E → E + T 3. T → T * F 5. F → ( E )
2. E → T 4. T → F 6. F → a
şi şirul a + a din acest limbaj. Secvenţele 1, 2, 4, 6, 4, 6 şi 1, 4, 6, 2, 4, 6
sunt diferite şi corespund la două derivări pentru a + a .
1 2 4 6 4 6
E ⇒ E + T ⇒T + T ⇒T + F ⇒T + a ⇒ F + a ⇒ a + a
şi
1 4 6 2 4 6
E ⇒ E + T ⇒ E + F ⇒ E + a ⇒T + a ⇒ F + a ⇒ a + a
Poate avea loc şi situaţia inversă: dacă nu specificăm la fiecare pas care
neterminal este înlocuit, aceeaşi secvenţă de producţii poate conduce la
arbori de derivare distincţi. Pentru a vedea asta considerăm gramatica
1. S → A
2. A → A0 A
3. A → 1
şi
1 2 2 3 3 3
S ⇒ A ⇒ A0 A ⇒ A0 A0 A ⇒ A0 A01⇒ A0101⇒ 10101
S ⇒ σ 1 ⇒ σ 2 ⇒ ... ⇒ σ n = σ (1.6)
1 3 4 5 1 2
E ⇒ T ⇒ T * F ⇒ F * F ⇒( E ) * F ⇒ ( E + T ) * F ⇒
4 6 4 6
(T + T ) + F ⇒( F + T ) * F ⇒(a + T ) * F ⇒(a + F ) * F ⇒
6
( a + a ) * F ⇒( a + a ) * a
2 3 6 4 5 1
E ⇒ T ⇒ T * F ⇒ T * a ⇒ F * a ⇒( E ) * a ⇒
4 4 6 4
( E + T ) * a ⇒( E + F ) * a ⇒( E + a ) * a ⇒(T + a) * a ⇒
1
( F + a ) * a ⇒(a + a ) * a
Astfel, dacă ştim de dinainte ce fel de derivare se foloseşte (la stânga sau
la dreapta), secvenţa de producţii din derivarea unei propoziţii va descrie
complet arborul de derivare.
Definiţia 1.13. O analiză la stânga a unui şir σ este secvenţa de
producţii folosită în derivare la stânga a lui σ . O analiză la dreapta a lui
σ este inversa secvenţei de producţii folosite în derivarea la stânga a lui
σ.
2 3 4 6 5
E ⇒ T ⇒ T * F ⇒ F * F ⇒ a * F ⇒ a *( E )
S ⇒ σ 1 L ⇒ a1a2 ...an .
S ⇒ σ 1 ⇒ σ 2 L ⇒ a1a2 ...an .
S ⇒ L ⇒ σ k ⇒ a1a2 ...an .
Pentru aceasta, trebuie să localizăm un subşir α din a1a2 ...an care
corespunde părţii drepte a unei producţii A → α şi să înlocuim acest α cu
A. (Un astfel de subşir α se numeşte referinţă (eng. handle)). În
continuare repetăm procedura cu şirul σ k în loc de a1a2 ...an . Continuăm
până când ajungem la S. Nu reiese limpede cum se obţine aceasta, dar
este posibil, dacă ne limităm la construirea derivării la stânga. Vom
explica acest proces în capitolul 8. Aşa se explica de ce analiza la dreapta
a fost definit ca fiind inversul secvenţei de producţii folosite în derivarea
la stânga a şirului: În analiza bottom-up determinăm mai întâi ultima
producţie folosită în derivare, iar apoi penultima ş.a.m.d.
PROBLEME
a) a + a + a b) (a + a) * a + a *(a + a) c) a * a * a + a * a
11. Mulţimea şirurilor peste Σ = {a, b} în care primul simbol este diferit
de ultimul simbol; σ 0 = aababab .
12. Mulţimea tuturor datelor valide pentru anul 1900 până 1999 dat sub
forma NOIEMBRIE 30, 1941. Observăm că anul 1900 nu a fost un
an bisect deci nu a existat un FEBRUARIE 29 în 1900;
σ 0 = OCTOMBRIE 30, 1941 .
16. S → SaSa | b
17. S → aSb | Sb | Sa | a
18. S → aaS | aaaS | a
19. S → aS | aSb | A , A → Aa | a
20. S → AA , A → AAA | a | bA | Ab
21. S → AaA , A → aA | bA | λ
22. Arătaţi că fiecare gramatică stâng liniară are şi o gramatică drept
liniară, şi reciproc.
23. Un fragment al gramatici corespunzătoare construcţiilor
if...then...else, dat în (1.3), a fost ambiguu, propoziţia (1.4) având,
ca în figura 1.8., doi arbori distincţi de derivare. Acest fragment a
fost rescris în (1.5) astfel încât propoziţia (1.4) să aibă arborele de
derivare dat de figura 1.8.(a). Rescrieţi gramatica din (1.3) astfel
încât propoziţia (1.4) să aibă un unic arbore de derivare dat de
figura 1.8.(b).