(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 ) *, AN – 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.