2.3 Navrhněte SLL(2) analyzátor pro gramatiku G = ({S, A, B, D}, {a, b, c}, P, 5), kde P obsahuje niže uvedená pravidla. Analyzujte slova acaac a abaac. 1 S — aAaA 2 S — aBaB 3 A — aA 4 A — c 5 B — bD 6 D — bD 7 D — e Nejprve pro každe pravidlo tvaru A — a spočítáme množinu FI2(a) 02 FO 2(A): 1 S— aAaA FI2 (aAaA) 02 FO2(S) = { aa, ac} 2 S— aBaB FI2 (aBaB) 02 FO2(S) = {ab} 3 A— aA FI2(aA) 02 FO2 (A) = { aa, ac} 4 A— c FI2 (c) 02 FO2 (A) = { ca, c} 5 B— bD FI2(bD) 02 FO2 (B) = { bb, ba, b} 6 D bD FI2(bD) 02 FO2 (D) = { bb, ba, b} 7 D e FI2 (e) 02 FO2 (D) = {ab, e} Nyní snadno zkonstruujeme tabulku prechodove funkce analyzatoru. Prazdna políčka znamenají, ze analyzator v odpovídající situaci vratí chybu, protoze analyzovanáe slovo nená generováano gramatikou G. aa ab ac ba bb bc ca cb cc a b c £ S aAaA, 1 aBaB, 2 aAaA, 1 A aA, 3 aA, 3 c, 4 c, 4 B bD, 5 bD, 5 bD, 5 D e, 7 bD, 6 bD, 6 bD, 6 e, 7 a cti cti Cti Cti b Cti Cti Cti Cti c Cti Cti Cti Cti $ Zpravidla se uvádí pouze "zajímavá" část tabulky, t.j. bez řádků pro terminály a pro $ a bez sloupců, které by nasledne zůstaly prázdné: aa ab ac ba bb ca b c e S aAaA, 1 aBaB, 2 aAaA, 1 A aA, 3 aA, 3 c, 4 c, 4 B bD, 5 bD, 5 bD, 5 D e, 7 bD, 6 bD, 6 bD, 6 e, 7 Analýza slova acaac: (acaac, S$,e) \- (acaac, aAaA$, 1) (caac,AaA$, 1) |- |- (caac,caA$, 14) p- (aac,aA$, 14) p- (ac,A$, 14) \- h (ac,aA$, 143) \± (c,A$, 143) \- (c,c$, 1434) ^ f^- (e, $, 1434) == akceptuje Analýza slova abaac: (abaac,S$,e) \- (abaac, aBaB$, 2) f^1 (baac,BaB$, 2) \- |- (baac,bDaB$, 25) f^- (aac,DaB$, 25) == zamíta 3.6 Zkonstruujte LL(3) analýzator pro gramatiku G = ({S, A, B}, {a, b}, P, S), kde P obsahuje pravidla: 1 S — aAaB 2 S — bAbB 3 A — a 4 A — ba 5 B — aB 6 B ->■ a Nejprve zkonstruujeme pomocne LL(3) tabulký: To = (S, {e}) S— aAaB aaa, aba {aa, aaa}, {e} S— bAbB bab, bba {ba, baa}, {e} T = (A, {aa, aaa}) A— a aaa — A— ba baa — T2 = (B, {e}) B— aB aa, aaa {e} B— a a — T3 = (A, {ba, baa}) A— a aba — A— ba bab — Nýní zapíšeme tabulku préchodove funkce analyzátoru. Uvadíme pouze zajímavou cast tabulký, tj. radký popisující situaci, kdý je na vrchovu zasobníku nejake Tj, a sloupce, které jsou v techto rídcích tabulký neprízdne. Zbýtek tabulký obsahuje pokýn CTI, je-li na vrcholu zasobníku terminal shodní s terminílem na vstupu, a AKCEPTUJ, je-li na vrcholu zasobníku jeho dno $ a celý vstup je préctený (na vstupu je e). Ve vsech ostatních případech (včetně prázdných buněk uvedené části tabulky) analyzátor vrátí chybu, protože analyzované slovo není generováno gramatikou G. aaa aba bab bba baa aa a To aTiaT2,1 aTiaT2,1 bT3 bT2,2 bT3bT2, 2 Ti a, 3 ba, 4 T aT2, 5 aT2, 5 a, 6 T3 a, 3 ba, 4