Sunteți pe pagina 1din 1

Gramatici Analizator descendent cu reveniri LR(0)

Gramatica: G = (N,  , P, S) 1. Imbogatim gramatica


(q,1,,S)
Chomsky: 2. Numerotam regulile
Tip 0: (fara restrictii) α → β, unde α != ε – expandare: (q,i,,A) ├ (q, i, A1 , 1) 3. Colectia canonica (clasica)
Tip 1: (monotone / dep de context): 4. Tabel de analiza
– avans: (q,i,,ai) ├ (q, i+1, ai , )
- M: |α| ≤ |β| a. Linii → starile (I0,…)
- D: α A β → α γ β ; A ∈ N; α, γ, β ∈ (N U ∑ )*, γ != ε – insucces de moment: (q,i,,a) ├ (r,i,,a) a<>ai b. Coloane → actiune, neterminale si terminale
Tip 2: (GIC): i. Actiune:
- A→α ,   (N   ) *, AN – succes: (q,n+1,,) ├ (t,n+1,,) 1. Shift daca ies linii
Tip 3: (Regulare): 2. r – daca e sf. de regula si nr
– revenire: (r,i,a,) ├ (r,i-1,,a) reguli
• A→ aB ; A,B N, a,b 
3. acc daca S’→ S
• A→ b – alta incercare: (r,i, Aj , j) ├
5. Analiza sintactica: ($0, sir$, ) → ($0S Iacc , $, )
L0  L1  L2  L3 … daca  Aj+1→j+1 ├ (q,i,Aj+1,j+1) a. “shift” (verific uiltima cifra cu primul din
Lema de pompare freapta si ma uit in table)
 p  N* a.i  w  L, cu |w|≥ p => ∃ w = x y z; 0 < |y|≤ p altfel daca i =1, A=S ├ (e,i,,A) a=, b= b. “r” (verific regula de prod cu nr reducerii, ma
xy iz ∈ L,  i  N altfel ├ (r,i,,A)
uit in stanga ce am si verific tabelul)
Lema de pompare puternica SLR
 w  L de lungime cel putin p LL(1)
- 0 < |y| 1. 1,2 la fel
1. Numerotam productiile 2. Colectia canonica (LR(0) + follow de ce e in stanga)
- |xy|≤p 2. First si follow 3. Tabel
- xyiz  L,  i  N 3. Tabel de analiza: a. Linii la fel, coloane (terminale, neterminale,
!Folosim negatia lemei de pompare pt. a dem. ca un limbaj nu
a. Linii: terminale + neterminale + {$} $)
este regular.
b. Coloane: terminale + {$} b. Celula: -
Automate
c. Celule: Fiecare element din First si i. Pleaca → (pun s si cifra starii in care
M = (Q, , , q0 , F) :
cum ajung la cel (nr reg). Daca ε e in se duce)
- AFD: |(q,a)| <=1  q  Q, a   ii. Nu pleaca → pun r si nr reg.
First si coloana e in Follow atunci trec
- AFN:  q  Q, a   astfel incat |(q,a)| > 1 iii. Daca Ii nu e finala, dar contine .
cum ajung la el. T[a][a] = pop, T[$][$]
- AFDC: |(q,a)| = 1  q  Q, a   punem ambele cazuri.
= acc
First Follow
4. Analiza secventei: (sir$, S$, ε) → ($, $, ∏) LR(1)
First = primul terminal de dupa →
Follow = primul terminal de dupa neterminalul a. push (ax$, A, )├ (ax$,,i) dc.:
1. Colectia canonica (First):
M(A,a) = (a,i)
current din membrul drept al productiilor a. Daca avem . inaintea unui neterminal, punem
Daca var = : b. pop (ax$, a, ) ├ (x$, , ) dupa virgula ce e dupa el.
- Terminal: Il scriem asa c. acc ($, $, ) ├ acc b. Daca dupa el e tot un neterminal punem first
- Neterminal: Ii scriem elementele din First d. err – in celelalte cazuri lui
- Neterminal pe ultima pozitie: Scriem follow LALR
productiei curente.
- Follow de terminal de pornire contine $. La fel, dar unim starile cu nucleu identic si concatenam ce e
dupa virgula.

S-ar putea să vă placă și