Sunteți pe pagina 1din 4

Implementarea algoritmului de analiza sintactica TOP DOWN general

April 6, 2011
Descrierea formal a a algoritmului este facut a dupa Aho si Ullman, The theory of Parsing, Translation, and Compiling. Vom considera c a regulile gramaticii sunt numerotate, iar pentru regulile cu neterminalul A n partea stang a, A 1 |2 | . . . |k vom nota Ai indexul regulii i. Algoritmul folose ste dou a stive L1 si L2, precum si un index ce reprezint a caracterul curent n sirul de intrare w = a1 a2 . . . an , n >= 0. Pentru descrierea formal a vom deni o congurat ie printrun cvadruplu (s, i, , ), unde s este starea algoritmului, i reprezint a indexul locat iei curente (pointer pe urmatorul caracter din sirul de intrare), este cont inutul stivei L1 iar este cont inutul stivei L2. Stiva L2 va cont ine la ecare pas forma propozit ional a din derivarea extrem st ang a, iar simbolul aat n v arful stivei va simbolul activ din arborele de derivare. Stiva L1 va cont ine un istoric al alegerii regulilor si simbolurile de intrare care au fost deja generate (prexele viabile ale sirului de intrare). Pentru u surint a prezent arii vom considera c a se folose ste un marcaj de sf ar sit pentru cuv antul examinat, notat cu $, acesta ind pe pozit ia n + 1. Algoritmul folose ste trei st ari q , b si t cu semnicat iile urmatoare: q operat ie normal a, b revenire (backtracking) si t terminare. Congurat ia init ial a a algoritmului va (q, 1, , S $). Funct ionarea algoritmului va o secvent a de pa si discret i ce pot descri si printro relat ie pe mult imea congurat iilor , notat a cu ca si n cazul evolut iei automatului push down. Conform cu descrierea informal a a algoritmului, avem urm atorele tipuri de pa si: Expandarea arborelui (q, i, , A )(q, i, A1 , 1 ) unde, A 1 este prima regula din list a, aplicat a celui mai din st anga neterminal n forma propozit ional a curent a. Potrivirea simbolului terminal din sirul de intrare cu terminalul activat de algoritm (q, i, , a )(q, i + 1, a, ) 1

Dac a simbolul din pozit ia curent a i din sirul de intrare coincide cu urm atorul terminal derivat, ai = a, atunci terminalul a aat n v arful stivei L2 se extrage si se scrie pe stiva L1. Totodat a se avanseaz a indexul i n sirul de intrare. Terminare cu succes (q, n + 1, , $)(t, n + 1, , S-a g asit marcajul de sf ar sit al sirului examinat si avem o form a propozit ional a format a ce coincide cu sirul examinat. Lista regulilor aplicate pentru obt inerea deriv arii extrem st angi se poate obt ine prin eliminarea terminalelor de pe stiva L1. Nepotrivirea simbolului terminal activ cu urm atorul simbol din sirul de intrare (q, i, , a )(b, i, , a ) ai = a Se intr a n modul revenire deoarece forma propozi onal a actual a nu va genera cuv antul de examinat. Revenire pe sirul examinat (b, i, a, )(b, i 1, , a ), a VT In modul revenire se mut a (shift) simbolurile de intrare inapoi de pe stiva L1 pe L2. Incercarea unei reguli noi pentru un ultimul neterminal activat (b, i, Aj , j ) (q, i, Aj +1 , j +1 ), dac a j +1 este urm atoarea regul a din lista neterminalului A. Adic a se inlocuieste partea dreapt a a ultimei reguli ncercate cu partea dreapt a a urm atoarei reguli. blocarea algoritmului, atunci c and i = 1, A = S si exist a doar j reguli pentru simbolul de start. In aceast a situat ie sirul de intrare w nu apart ine limbajului generat de gramatica dat a. (b, i, , A ) pentru orice alt a situat ie. Este cazul c and toate regulile lui A au fost ncercate si revenirea se face prin extragerea numarului regulii Aj de pe stiva L1 si nlocuirea p art ii drepte j cu neterminalul A n stiva L2. EXEMPLU: Consider am gramatica simplicat a ce genereaz a expresiile aritmetice f ar a paranteze, pentru care regulile sunt numerotate astfel:

(1) E T + E (2) E T (3) T F T (4) T F (5) F a In descriere vom utiliza E1 pentru T + E , E2 pentru T , samd. Examinarea sirului de intrare w = a + a va descris a de urm atoarea secvent a de congurat ii.

(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 st ang a se obt ine prin eliminarea terminalelor si asocierea num arului regulii cu notat ia r amas a pe stiv a, adic a ordinea de aplicare a regulilor este 145245.

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