120 likes | 231 Views
Santaktická analýza zhora nadol. Syntak ti ck ý analyzátor ako súbor rekurzívnych procedúr. Základ každý symbol gramatiky je implementovaný ako procedúra. Procedúra pre neterminál. Vytvára sa na základe pravej strany príslušného pravidla
E N D
Syntaktický analyzátor ako súbor rekurzívnych procedúr • Základ • každý symbol gramatiky je implementovaný ako procedúra
Procedúra pre neterminál • Vytvára sa na základe pravej strany príslušného pravidla • Zisťuje, či terminálny prefix ľavých vetných foriem doterajšej analýzy je v zhode s prefixom analyzovaného reťazca • Volá procedúru podľa nasledujúceho symbolu príslušnej pravej strany zodpovedajúceho pravidla
Procedúra pre terminál • Pracuje s prvým symbolom nespracovanej časti vstupného reťazca – SYMB, ktorý sa načítava procedúrou LEX • Pre každý terminál t T sa vytvorí procedúra pt, ktorá má tvar Procedure pt; Begin if SYMB = t then LEX else chyba := True end;
Procedúra pre neterminál • Pre každý neterminál a pravidlo A -> α1 | α2 | …| αn vytvoríme procedúru pA tvaru Procedure pA; beginif not CHYBA then begin if SYMB in FF1 thenα’1else if SYMB in FF2 thenα’2else … if SYMB in FFn thenα’nelse CHYBA := true end end
Procedúra pre neterminál Cont. • Kde FFi pre 1 <= i <= n predstavuje množinu FIRST(αi) , ak e nie je v FIRST(αi), inak Množinu FIRST(αi)∪ FOLLOW (A) α’i - je postupnosť príkazov zodpovedajúcich jednotlivým symbolom reťazca αi
Operačná časť synataktického analyzátora • begin LEX; CHYBA := False; pSend
Príklad – Jednoduchý AV • Gramatika: • E -> T E’ • E’ -> + T E’ • E’ -> e • T -> F T’ • T’ -> * F T’ • T’ -> e • F -> ( E ) • F -> a
Analyzátor v jazyku „ Pascal like“ type SYMBOLY = (id, plus, krat, lz, pz, e) procedure id; begin if SYMB = id then LEX else CHYBA := true end
Analyzátor v jazyku „ Pascal like“ Cont. procedure E; begin if not CHYBA then begin if SYMB in [ lz, id ] then begin T; E’ end else CHYBA := true end end