Sunteți pe pagina 1din 4

Implementarea algoritmului de analiza sintactica TOP DOWN general

April 6, 2011
Descrierea formal a algoritmului este facut dupa Aho i Ullman, The theory a a s of Parsing, Translation, and Compiling. Vom considera c regulile gramaticii a sunt numerotate, iar pentru regulile cu neterminalul A partea stang, A n a 1 |2 | . . . |k vom nota Ai indexul regulii i. Algoritmul folosete dou stive L1 s a i L2, precum i un index ce reprezint caracterul curent irul de intrare w = s s a n s a1 a2 . . . an , n >= 0. Pentru descrierea formal vom deni o conguratie printra un cvadruplu (s, i, , ), unde s este starea algoritmului, i reprezint indexul a locatiei curente (pointer pe urmatorul caracter din sirul de intrare), este continutul stivei L1 iar este continutul stivei L2. Stiva L2 va contine la ecare pas forma propozitional din derivarea extrem stng, iar simbolul aat vrful a a a n a stivei va simbolul activ din arborele de derivare. Stiva L1 va contine un istoric al alegerii regulilor i simbolurile de intrare care au fost deja generate (prexele s viabile ale irului de intrare). Pentru uurinta prezentrii vom considera c se s s a a folosete un marcaj de sfrit pentru cuvntul examinat, notat cu $, acesta ind s as a pe pozitia n + 1. Algoritmul folosete trei stri q, b i t cu semnicatiile urmatoare: q operatie s a s normal, b revenire (backtracking) i t terminare. Conguratia initial a algoa s a ritmului va (q, 1, , S$). Functionarea algoritmului va o secvent de pai a s discreti ce pot descrii printro relatie pe multimea conguratiilor , notat cu s a ca i cazul evolutiei automatului push down. s n Conform cu descrierea informal a algoritmului, avem urmtorele tipuri de a a pai: s Expandarea arborelui (q, i, , A)(q, i, A1 , 1 ) unde, A 1 este prima regula din list, aplicat celui mai din stnga a a a neterminal forma propozitional curent. n a a Potrivirea simbolului terminal din sirul de intrare cu terminalul activat de algoritm (q, i, , a)(q, i + 1, a, ) 1

Dac simbolul din pozitia curent i din irul de intrare coincide cu urmtorul a a s a terminal derivat, ai = a, atunci terminalul a aat vrful stivei L2 se n a extrage i se scrie pe stiva L1. Totodat se avanseaz indexul i irul de s a a n s intrare. Terminare cu succes (q, n + 1, , $)(t, n + 1, , S-a gsit marcajul de sfrit al irului examinat i avem o form propozitional a as s s a a format ce coincide cu irul examinat. Lista regulilor aplicate pentru a s obtinerea derivrii extrem stngi se poate obtine prin eliminarea termi a a nalelor de pe stiva L1. Nepotrivirea simbolului terminal activ cu urmtorul simbol din a irul de intrare s (q, i, , a)(b, i, , a) ai = a Se intr modul revenire deoarece forma propozi a n onal actual nu va a a genera cuvntul de examinat. a Revenire pe irul examinat s (b, i, a, )(b, i 1, , a), a VT modul revenire se mut (shift) simbolurile de intrare inapoi de pe stiva In a L1 pe L2. Incercarea unei reguli noi pentru un ultimul neterminal activat (b, i, Aj , j ) (q, i, Aj+1 , j+1 ), dac j+1 este urmtoarea regul din lista netera a a minalului A. Adic se inlocuieste partea dreapt a ultimei reguli a a ncercate cu partea dreapt a urmtoarei reguli. a a blocarea algoritmului, atunci cnd i = 1, A = S i exist doar j a s a reguli pentru simbolul de start. aceast situatie irul de intrare w In a s nu apartine limbajului generat de gramatica dat. a (b, i, , A) pentru orice alt situatie. Este cazul cnd toate regulile a a lui A au fost ncercate i revenirea se face prin extragerea numarului s regulii Aj de pe stiva L1 i s nlocuirea prtii drepte j cu neterminalul a A stiva L2. n EXEMPLU: Considerm gramatica simplicat ce genereaz expresiile ara a a itmetice fr paranteze, pentru care regulile sunt numerotate astfel: aa

(1) E T + E (2) E T (3) T F T (4) T F (5) F a descriere vom utiliza E1 pentru T + E, E2 pentru T , samd. Examinarea In irului de intrare w = a+a va descris de urmtoarea secvent de conguratii. s a a a

(q, 1, , E$)

(q, 1, E1 , T + E$) (q, 1, E1 T1 , F T + E$) (q, 1, E1 T1 F1 , a T + E$) (q, 2, E1 T1 F1 a, T + E$) (b, 2, E1 T1 F1 a, T + E$) (b, 1, E1 T1 F1 , a T + E$) (b, 1, E1 T1 , F T + E$) (q, 1, E1 T2 , F + E$) (q, 1, E1 T2 F1 , a + E$) (q, 2, E1 T2 F1 a, +E$) (q, 3, E1 T1 F1 a+, E$) (q, 3, E1 T2 F1 a + E1 , T + E$) (q, 3, E1 T2 F1 a + E1 T1 , F T + E$) (q, 3, E1 T2 F1 a + E1 T1 F1 , a T + E$) (q, 4, E1 T2 F1 a + E1 T1 F1 a, T + E$) (b, 4, E1 T2 F1 a + E1 T1 F1 a, T + E$) (b, 3, E1 T2 F1 a + E1 T1 F1 , a T + E$) (b, 3, E1 T2 F1 a + E1 T1 , F T + E$) (q, 3, E1 T2 F1 a + E1 T2 , F + E$) (q, 3, E1 T2 F1 a + E1 T2 F1 , a + E$) (q, 4, E1 T2 F1 a + E1 T2 F1 a, +E$) (b, 4, E1 T2 F1 a + E1 T2 F1 a, +E$) (b, 3, E1 T2 F1 a + E1 T2 F1 , a + E$) (b, 3, E1 T2 F1 a + E1 T2 , F + E$) (b, 3, E1 T2 F1 a + E1 , T + E$) (q, 3, E1 T2 F1 a + E2 , T $) (q, 3, E1 T2 F1 a + E2 T1 , F T $) (q, 3, E1 T2 F1 a + E2 T1 F1 , a T $) (q, 4, E1 T2 F1 a + E2 T1 F1 a, T $) (q, 4, E1 T2 F1 a + E2 T1 F1 a, T $) (b, 4, E1 T2 F1 a + E2 T1 F1 a, T $) (b, 3, E1 T2 F1 a + E2 T1 F1 , a T $) (b, 3, E1 T2 F1 a + E2 T1 , F T $) (q, 3, E1 T2 F1 a + E2 T2 , F $) (q, 3, E1 T2 F1 a + E2 T2 F1 , a$) (q, 4, E1 T2 F1 a + E2 T2 F1 a, $) (t, 4, E1 T2 F1 a + E2 T2 F1 a, )

O derivare extrem stng se obtine prin eliminarea terminalelor i asocierea a a s numrului regulii cu notatia rmas pe stiv, adic ordinea de aplicare a rega a a a a ulilor este 145245.

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