Kompilátory Syntaxou riadený preklad. Ján Šturc Zima 2009

Σχετικά έγγραφα
KOMPILÁTORY: Syntaxou riadený preklad. Jana Dvořáková

Gramatická indukcia a jej využitie

Ekvačná a kvantifikačná logika

Matematika Funkcia viac premenných, Parciálne derivácie

LR(0) syntaktické analyzátory. doc. RNDr. Ľubomír Dedera

Obvod a obsah štvoruholníka

7. FUNKCIE POJEM FUNKCIE

1. Limita, spojitost a diferenciálny počet funkcie jednej premennej

Prechod z 2D do 3D. Martin Florek 3. marca 2009

Motivácia Denícia determinantu Výpo et determinantov Determinant sú inu matíc Vyuºitie determinantov. Determinanty. 14. decembra 2010.

Start. Vstup r. O = 2*π*r S = π*r*r. Vystup O, S. Stop. Start. Vstup P, C V = P*C*1,19. Vystup V. Stop

Cvičenie č. 4,5 Limita funkcie

Goniometrické rovnice a nerovnice. Základné goniometrické rovnice

Jednotkový koreň (unit root), diferencovanie časového radu, unit root testy

Kompilátory. Cvičenie 6: LLVM. Peter Kostolányi. 21. novembra 2017

6 Limita funkcie. 6.1 Myšlienka limity, interval bez bodu

Planárne a rovinné grafy

Funkcie - základné pojmy

ARMA modely čast 2: moving average modely (MA)

,Zohrievanie vody indukčným varičom bez pokrievky,

Matematika prednáška 4 Postupnosti a rady 4.5 Funkcionálne rady - mocninové rady - Taylorov rad, MacLaurinov rad

Moderné vzdelávanie pre vedomostnú spoločnosť Projekt je spolufinancovaný zo zdrojov EÚ M A T E M A T I K A

Priamkové plochy. Ak každým bodom plochy Φ prechádza aspoň jedna priamka, ktorá (celá) na nej leží potom plocha Φ je priamková. Santiago Calatrava

Automaty a formálne jazyky

Matematika 2. časť: Analytická geometria

ARMA modely čast 2: moving average modely (MA)

24. Základné spôsoby zobrazovania priestoru do roviny

1. písomná práca z matematiky Skupina A

Úvod do lineárnej algebry. Monika Molnárová Prednášky

Návrh vzduchotesnosti pre detaily napojení

Štrukturálne (syntaktické) rozpoznávanie

KATEDRA DOPRAVNEJ A MANIPULAČNEJ TECHNIKY Strojnícka fakulta, Žilinská Univerzita

2. prednáška. Teória množín I. množina operácie nad množinami množinová algebra mohutnosť a enumerácia karteziánsky súčin

3. Striedavé prúdy. Sínusoida

3. kapitola. Axiomatická formulácia modálnej logiky Vzťah medzi syntaxou a sémantikou. priesvitka 1

4. Výrokové funkcie (formy), ich definičný obor a obor pravdivosti

Fakulta matematiky, fyziky a informatiky Univerzita Komenského, Bratislava Katedra Informatiky

Rozsah hodnotenia a spôsob výpočtu energetickej účinnosti rozvodu tepla

Tomáš Madaras Prvočísla

Harmonizované technické špecifikácie Trieda GP - CS lv EN Pevnosť v tlaku 6 N/mm² EN Prídržnosť

Komplexné čísla, Diskrétna Fourierova transformácia 1

Metódy vol nej optimalizácie

Reálna funkcia reálnej premennej

Podnikateľ 90 Mobilný telefón Cena 95 % 50 % 25 %

C. Kontaktný fasádny zatepľovací systém

Matematika 2. časť: Funkcia viac premenných Letný semester 2013/2014

Jednotkový koreň (unit root), diferencovanie časového radu, unit root testy

1 Prevod miestneho stredného slnečného času LMT 1 na iný miestny stredný slnečný čas LMT 2

Chí kvadrát test dobrej zhody. Metódy riešenia úloh z pravdepodobnosti a štatistiky

Vlastnosti nekonečných slov generovaných pomocou DGSM (diplomová práca)

HASLIM112V, HASLIM123V, HASLIM136V HASLIM112Z, HASLIM123Z, HASLIM136Z HASLIM112S, HASLIM123S, HASLIM136S

4 Reálna funkcia reálnej premennej a jej vlastnosti

REZISTORY. Rezistory (súčiastky) sú pasívne prvky. Používajú sa vo všetkých elektrických

Pevné ložiská. Voľné ložiská

AerobTec Altis Micro

Lineárna algebra I - pole skalárov, lineárny priestor, lineárna závislosť, dimenzia, podpriestor, suma podpriestorov, izomorfizmus

MIDTERM (A) riešenia a bodovanie

Integrovanie racionálnych funkcií

M6: Model Hydraulický systém dvoch zásobníkov kvapaliny s interakciou

Riešenie cvičení z 5. kapitoly

Reprezentácia informácií v počítači

1. Dátové štruktúry pre geometrické algoritmy

FUNKCIE N REÁLNYCH PREMENNÝCH

RIEŠENIE WHEATSONOVHO MOSTÍKA

Riešenie rovníc s aplikáciou na elektrické obvody

Cieľom cvičenia je zvládnuť riešenie diferenciálnych rovníc pomocou Laplaceovej transformácie,

Život vedca krajší od vysnívaného... s prírodou na hladine α R-P-R

7 Derivácia funkcie. 7.1 Motivácia k derivácii

Definícia parciálna derivácia funkcie podľa premennej x. Definícia parciálna derivácia funkcie podľa premennej y. Ak existuje limita.

Vektorový priestor V : Množina prvkov (vektory), na ktorej je definované ich sčítanie a ich

PRIEMER DROTU d = 0,4-6,3 mm

PRÍSTROJE PRE ROZVÁDZAČE

Motivácia pojmu derivácia

VOJENSKÁ AKADÉMIA V LIPTOVSKOM MIKULÁŠI PREKLADAČE

Model redistribúcie krvi

Γλώσσες Προγραμματισμού Μεταγλωττιστές. Σημασιολογική Ανάλυση

Gramatiky. Kapitola Úvod. 1.2 Návrh gramatík

Margita Vajsáblová. ρ priemetňa, s smer premietania. Súradnicová sústava (O, x, y, z ) (O a, x a, y a, z a )

23. Zhodné zobrazenia

Výroky, hypotézy, axiómy, definície a matematické vety

Prostredie pre podporu výučby predmetu Formálne jazyky a automaty

TREDNÁ ODBORNÁ ŠKOLA STRÁŽSKE PRACOVNÝ ZOŠIT. k predmetu Matematika pre

Obsah. 1.1 Reálne čísla a ich základné vlastnosti Komplexné čísla... 8

UČEBNÉ TEXTY. Pracovný zošit č.2. Moderné vzdelávanie pre vedomostnú spoločnosť Elektrotechnické merania. Ing. Alžbeta Kršňáková

1-MAT-220 Algebra februára 2012

Pravdivostná hodnota negácie výroku A je opačná ako pravdivostná hodnota výroku A.

Eulerovské grafy. Príklad Daný graf nie je eulerovský, ale obsahuje eulerovskú cestu (a, ab, b, bc, c, cd, d, da, a, ac, c, ce, e, ed, d, db).

Vybrané partie z logiky

Rozsah akreditácie 1/5. Príloha zo dňa k osvedčeniu o akreditácii č. K-003

Termodynamika. Doplnkové materiály k prednáškam z Fyziky I pre SjF Dušan PUDIŠ (2008)

3. prednáška. Komplexné čísla

Základy matematickej štatistiky

SLOVENSKO maloobchodný cenník (bez DPH)

Vlastnosti regulátorov pri spätnoväzbovom riadení procesov

Metodicko pedagogické centrum. Národný projekt VZDELÁVANÍM PEDAGOGICKÝCH ZAMESTNANCOV K INKLÚZII MARGINALIZOVANÝCH RÓMSKYCH KOMUNÍT

KATALÓG KRUHOVÉ POTRUBIE

1 Úvod Predhovor Sylaby a literatúra Základné označenia... 3

TECHNICKÁ UNIVERZITA V KOŠICIACH STROJNÍCKA FAKULTA MATEMATIKA 1. Funkcia jednej premennej a jej diferenciálny počet

Kontrolné otázky na kvíz z jednotiek fyzikálnych veličín. Upozornenie: Umiestnenie správnej a nesprávnych odpovedí sa môže v teste meniť.

Akumulátory. Membránové akumulátory Vakové akumulátory Piestové akumulátory

Transcript:

Kompilátory Syntaxou riadený preklad Ján Šturc Zima 2009

Syntaxou riadené definície Symbolom gramatiky sú priradené atribúty, ktoré nesú dodačnú informáciu o konštrukciách rozpoznávaných syntaxou. Hodnoty atribútov sa vypočítavajú pomocou sémantických rutín asociovaných so syntaktickými pravidlami. Sémantické rutiny môžu: generovať medzijazyk, ukladať a vyberať informáciu z tabuľky symbolov, vykonávať kontrolu typov, produkovať správy o chybách, vykonávať nejaké iné činnosti. Môžu to byť akékoľvek programy, poradie ich výpočtu určuje prekladová schéma. Atribút je premenná ľubovoného typu: reťazec, číslo, smerník, zložený typ (record). Zima 2009 Ján Šturc: Kompilátory - syntaxou riadený preklad 2

Syntaxou riadené definície a prekladové schémy Pre programovaciu paradigmu syntaxou riadeného prekladu používame dva pojmy: Syntaxou riadené definície Prekladové schémy Syntaxou riadená definícia: Je čosi medzi špecifikáciou a programom. Abstrahuje od mnohých implementačných detailov, hlavne od poradia výpočtu. K pravidlám gramatiky sa pridajú sémantické rutiny a nič sa nehovorí o poradí ich výpočtu. Prekladová schéma: Určuje poradie volania sémantických rutín a spôsob komunikácie medzi nimi. Poradie volania sémantických rutín môže a nemusí súvisieť s metódou syntaktickej analýzy. Pre jednu metódu syntaktickej analýzy sa dá použiť (vymyslieť) viacero prekladových schém. Zima 2009 Ján Šturc: Kompilátory - syntaxou riadený preklad 3

Syntaxou riadené definície Syntaxou riadená definícia je zovšeobecnenie bezkontextovej gramatiky: Každému symbolu gramatiky je priradená množina atribútov. Z množiny atribútov vydelujeme dve významné podmnožiny: syntetizované atribúty (atribúty sa propagujú od synov otcovi) dedičné atribúty (dedia sa od otca a súrodencov ). Prekladová schéma je množina pravidiel, ktoré určujú graf závislosti medzi atribútmi a poradie ich vyhodnotenia. Môže byť lokálna, v rámci pravidla Globálna, spoločná pre všetky pravidlá Graf závislostí určuje aj poradie volania sémantických rutín. Sémantické rutiny počítajú hodnoty atribútov, môžu mať vedlajšie efekty (napr. zápis do tabuľky symbolov). Zima 2009 Ján Šturc: Kompilátory - syntaxou riadený preklad 4

Atribútové gramatiky Každému pravidlu gramatiky A α priradíme množinu sémantických rutín tvaru: b:= f(c 1,c 2,,c n ); kde f je funkcia a pre b a c 1,c 2,,c n platí jeden z nasledujúcich výrokov: b je syntetizovaný atribút A c 1,c 2,,c n sú atribúty symbolov v pravidle ( A α ). alebo b je zdedený atribút niektorého zo symbolov α (pravej strany pravidla) a c 1,c 2,,c n sú atribúty symbolov v pravidle (A α ). Zima 2009 Ján Šturc: Kompilátory - syntaxou riadený preklad 5

Všeobecná metóda Annotated parse tree Syntaktický strom s uzlami ozdobenými atribútmi sa nazýva annotated parse tree. Proces výpočtu hodnôt atribútov v uzloch sa nazýva annotating (alebo zdobenie) syntaktického stromu. Poradie týchto výpočtov je určené grafom závislostí atribútov, indukovaným prekladovou schémou. Vlastne ani nepotrebujeme prekladovú schému, stačí predpokladať, že používame globálne mená atribútov a výpočet atribútu je tvaru: b := f(c 0, c 1,..., c n-1 ); Graf závislostí konštruujeme z výpočtových pravidiel, hrana b c i znamená, že b sa počíta pomocou c i. Topologické utriedenie grafu závislostí implikuje poradie výpočtu. Zima 2009 Ján Šturc: Kompilátory - syntaxou riadený preklad 6

Atribútové gramatiky Sémantické pravidlo b:= f(c 1,c 2,,c n ) hovorí, že the atribút b závisi od atribútov c 1,c 2,,c n. V syntaxou riadených dafiníciach, sémantické rutiny (pravidlá) môžu okrem výpočtu atribútova mať vedlajšie efkty (side effects) napr.: zápis do tabuľky, výstup a pod. Atribútová gramatika je syntaxou riadená definícia, v ktorej sémantické rutiny nemajú vedlajší efekt. Sú to funkcie, ktoré počítajú atribúty. Zima 2009 Ján Šturc: Kompilátory - syntaxou riadený preklad 7

Syntaxou riadená definícia príklad Gramatika L E return E E 1 + T E T T T 1 * F T F F ( E ) F digit Sémantické rutiny print(e.val) E.val = E 1.val + T.val E.val = T.val T.val = T 1.val * F.val T.val = F.val F.val = E.val F.val = digit.lexval 9. Symbolom E, T a F je priradený (syntetizovaný) atribút val. 10. Token digit má atribút lexval (Predpokladáme, že hodnotu mu priradila lexikálna analýza.) Zima 2009 Ján Šturc: Kompilátory - syntaxou riadený preklad 8

Ozdobený syntaktický strom príklad Vstup: 5+3*4 L E.val=17 return E.val=5 + T.val=12 T.val=5 T.val=3 * F.val=4 F.val=5 F.val=3 digit.lexval=4 digit.lexval=5 digit.lexval=3 Zima 2009 Ján Šturc: Kompilátory - syntaxou riadený preklad 9

Graf závislosti atribútov príklad Vstup: 5+3*4 L E.val=17 E.val=5 T.val=12 T.val=5 T.val=3 F.val=4 F.val=5 F.val=3 digit.lexval=4 digit.lexval=5 digit.lexval=3 Zima 2009 Ján Šturc: Kompilátory - syntaxou riadený preklad 10

Iný príklad generovanie kódu Gramatika E E 1 + T E T T T 1 * F T F F ( E ) F id Semantické rutiny E.loc=newtemp(); E.code = E 1.code T.code add E 1.loc,T.loc,E.loc E.loc = T.loc; E.code=T.code T.loc=newtemp(); T.code = T 1.code F.code mult T 1.loc, F.loc, T.loc T.loc = F.loc, T.code=F.code F.loc = E.loc, F.code=E.code F.loc = id.name, F.code= Symboly E, T, a F majú dva syntetizované atribúty loc a code. Token id má a syntetizovaný atribút name (predpokladáme, že ho priradila lexikálna analýza). označuje zreťazenie. Zima 2009 Ján Šturc: Kompilátory - syntaxou riadený preklad 11

Syntaxou riadené definície zdedené atribúty Gramatika Sémantické rutiny D T L ; L.in:= T.type; T int T.type:= integer; T real T.type:= real; L L 1, id L 1.in = L.in; addtype(id.entry, L.in); L id addtype(id.entry, L.in); Symbol T má syntesizovaný atribút type. Symbol L má zdedený atribút in. Zima 2009 Ján Šturc: Kompilátory - syntaxou riadený preklad 12

Graf závislosti atribútov zdedené atribúty Vstup: real p q D L.in=real T L T.type=real L 1.in=real addtype(q,real) real L id addtype(p, real) id.entry=q id id.entry=p syntaktický strom graf závislosti atribútov Zima 2009 Ján Šturc: Kompilátory - syntaxou riadený preklad 13

Syntaktické stromy ako vnútorná reprezentácia Oddelenie prekladu od syntaktického stromu Syntaktický strom: je vnútorna reprezentácia vstupu prvý postupný cieľ prekladu. Nástroje: ptn function mknode(op:op, ptn:ls, ps); ptn function mkleaf(a:token, b:lexval); syntetizovaný atribút nptr ( ptn: pointer to node) Gramatika E E 1 + T Sémantické rutiny E.nptr = mknode( +,E 1.nptr,T.nptr) E E 1 - T E T T (E) T id T num E.nptr = mknode( -,E 1.nptr,T.nptr) E.nptr = T.nptr T.nptr = E.nptr T.nptr = mkleaf(id, id.lexval) T.nptr = mkleaf(num, num.lexval) Zima 2009 Ján Šturc: Kompilátory - syntaxou riadený preklad 14

Reprezentácia syntaktických stromov dátova štruktúra a-4+c + Doplňujúce informácie v uzloch: atribúty funkcie - id to entry for c id num 4 to entry for a do tabuľky symbolov Zima 2009 Ján Šturc: Kompilátory - syntaxou riadený preklad 15

Vytvorenie grafu závislostí medzi atribútami D = <V, E>, kde V je množina vrcholov a E množina hrán Ak graf D neobsahuje cyklus, jeho topologickým utriedením získame poradie výpočtu atribútov Nevýhodou všeobecnej metódy je potreba konštrukcie syntaktického stromu a grafu závisloti. Zima 2009 Ján Šturc: Kompilátory - syntaxou riadený preklad 16

Stromy a dagy výrazov Strom výrazu, hoci je veľmi podobný syntaktickému stromu, nie je syntaktický strom. (Vzájomná transformácia je skoro izomorfizmus ). Infixová, prefixová a sufixová notácia majú rôzne syntaktické stromy, ale ten istý strom výrazu. Zima 2009 Ján Šturc: Kompilátory - syntaxou riadený preklad 17

Prekladové schémy 1. Konštrukciou ozdobeného syntaktického stromu a grafu závislostí Práve bola popísaná. Má viac prechodov. Počas kompilácie 2. Bez explicitnej konštrukcie grafu závislostí. Poradie je určené metódou syntaktickej analýzy. S-atribútové definície L-atribútove definície 3. Cez globálne dátové štruktury. Sémantické rutiny okrem atribútov pracujú aj s globálnymi štruktúrami. Syntaktický analyzátor volá sémantické rutiny podľa potreby. Globálne dátové štruktúry umožňujú obchádzať zásobníkovú disciplínu odovzdávania atribútov. Zima 2009 Ján Šturc: Kompilátory - syntaxou riadený preklad 18

Ohraničenia na syntaxou riadené definície 1. S-atribútové definície: Používajú len syntetizované atribúty. Syntetizované atribúty sú dobré. Syntaktická analýza zdola-nahor ich môže počítať pri redukcii. 2. Zdedené atribúty sa vo všeobecnosti nedajú vypočítať počas syntaktickej analýzy. Pri analýze zhora dolu sú problémom atribúty symbolov napravo od práve prezeraného symbolu. 3. L-atribútové definície: Okrem syntetizovaných atribútov používajú aj zdedené atribúty, ale dediť sa môže len od otca a ľavých súrodencov. Dajú sa vyhodnotiť pri analýze zhora nadol. (Syntetizovaný atribút otca vyhodnotíme ako zdedený atribút posledného symbolu pravidla.) S-atribútové a L-atribútové definície sa dajú vyhodnotiť v jedinom prechode súčasne so syntaktickou analýzou. Zima 2009 Ján Šturc: Kompilátory - syntaxou riadený preklad 19

Vyhodnotenie S-atribútových definícii zdola nahor Syntetizované atribúty symbolov gramatiky ukladáme do paralelného zásobníku. Predstavujeme si zásobník ako Keď zásobník syntaktického anlyzátora obsahuje symbol X (terminál alebo neterminál), zodpovedajúca položka paralelného zásobníku obsahuje syntetizované atribúty symbolu X. Výpočet sémantickej rutiny sa realizuje súčasne s redukciou. top A XYZ A.a:= f(x.x,y.y,z.z), všetky atribúty sú syntetizované. zásobník (abstrahujeme od stavov) Z Y X. Z.z Y.y X.x. stav top symbol A. A.a. atribúty Zima 2009 Ján Šturc: Kompilátory - syntaxou riadený preklad 20

Príklad implementácia S-atribútovej definície Pravidlá L E return E E 1 + T E T T T 1 * F T F F ( E ) F digit Sémantické rutiny print(val[top-1]) val[ntop] = val[top-2] + val[top] val[ntop] = val[top-2] * val[top] val[ntop] = val[top-1] Pri operácii shift sa lexikálny atribút lexval tokenu (digit.lexval) na vstupe natlačí (push) do paralelného zásobniku. Ak token (+,*) nemá atribúty, môže to byť hocičo, resp. stačí posunúť smerník na vrchol zásobníku. Pri redukcii podľa pravidla A β sa vrchol zásobníka nastaví na ntop = top β + 1. Zima 2009 Ján Šturc: Kompilátory - syntaxou riadený preklad 21

L-atribútové definície Syntaxou riadená definícia je L-atribútová, ak pre ľubovolné pravidlo A X 1 X 2...X n platí, že každý dedičný atribút symbolu X i z pravej strany pravidla je závislý iba na: atribútoch symbolov X 1,...,X i-1, ktoré sú v pravidle na ľavo od X i a dedičných atribútoch symbolu A. Príklad SRD, ktorá nie je L-atribútová Gramatika Sématické rutiny Nesplňuje definíciu Pozn.: Každá S-atribútová SRD je aj L-atribútová. Zima 2009 Ján Šturc: Kompilátory - syntaxou riadený preklad 22

Vyhodnotenie L-atribútových definícii Atribúty sa dajú vyhodnotiť prehľadávaním syntaktického stromu do hĺbky (depth-first search). Implementácia pri syntaktickej analýze Zhora nadol: Všetky SRD založené na LL(1) gramatikách. Zdola nahor: Všetky SRD založené na LL(1) gramatikách a veľká časť SRD založených na LR(1) gramatikách. Zima 2009 Ján Šturc: Kompilátory - syntaxou riadený preklad 23

Prekladové schémy I Prekladová schéma je konkretizácia syntaxou riadenej definície. Špecifikuje naviac poradie výpočtu atribútov. Volanie sémantických rutín sa zapisuje v krútených zátvorkách do vnútra pravej strany pravidla na miesto, kde sa má vykonať. Príklad preklad aritmetických výrazov do sufixovej formy E T R R addop T {emit(addop.lexval)} R 1 ε T F Q Q mulop F {emit(mulop.lexval)} Q 1 ε F (E) id {emit(id.lexval)} Tajne predpokladáme, že syntaktická analýza sa bude robiť zhora nadol a v tom poradí sa vyhodnocujú aj sémantické rutiny. Zima 2009 Ján Šturc: Kompilátory - syntaxou riadený preklad 24

Prekladové schémy II Prakticky jediným obmedzením je, že sémantická rutina sa nesmie odkazovať na ešte nevyhodnotený atribút. Pre S-atribútové definície je jednoduché sémantické rutiny prídu nakoniec. Príklad ten istý E E addop T {emit(addop.lexval)} T T T mulop F {emit(mulop.lexval)} F F (E) id {emit(id.lexval)} Tentokrát na syntaktickú analýzu používame posunovo redukčný automat. Zima 2009 Ján Šturc: Kompilátory - syntaxou riadený preklad 25

Prekladové schémy pre L-atribútové SRD 1. Dedičný atribút symbolu na pravej strane pravidla musí byť vypočítaný v sémantickej rutine naľavo od neho. 2. Sémantická rutina nesmie používať syntetizované atribúty symbolov napravo od nej. 3. Syntetizovaný atribút ľavej strany pravidla sa dá vypočítať až potom, čo boli vypočítané všetky atribúty, na ktorých je závislý. Obvykle sémantickú rutinu, ktorá ho počíta, umiestňujeme na konci pravej strany príslušného pravidla. L-atribútové prekladové schémy sa prirodzene implementujú pre LL(1) gramatiky. Ľavo rekurzívne schémy používajúce len syntetizované atribúty vieme mechanicky prerobiť na pravo rekurzívne. Zima 2009 Ján Šturc: Kompilátory - syntaxou riadený preklad 26

Transformácia ľavo rekurzívnej schémy Zima 2009 Ján Šturc: Kompilátory - syntaxou riadený preklad 27

Príklad - kalkulačka E E 1 + T T T 1 * F F ( E ) F num {E.val := E 1.val + T.val} T {E.val := T.val} {T.val := T 1.val * F.val} F {T.val := F.val} {F.val := E.val} {F.val := num.lexval} E T{R.i := T.val} R{E.val := R.s} R + T{R 1.i := R.i + T.val} R 1 {R.s :=R 1.s} ε {R.s := R.i} T F{Q.i := F.val} Q{T.val := Q.s} Q *F {Q 1.i := Q.i * F.val} Q 1 {Q.s := Q 1.s} ε {Q.s := Q.i} F (E) {F.val := E.val} num {F.val := num.lexval} Zima 2009 Ján Šturc: Kompilátory - syntaxou riadený preklad 28

Rekurzívny zostup pre L-atribútové schémy Neterminálnym symbolom priradíme funkcie. Argumenty funkcie priradenej neterminálnemu symbolu A sú zdedené atribúty symbolu A. Funkcia priradená symbolu A vracia syntetizované atribúty symbolu A. Funkcia A musí plniť obe úlohy Robiť syntaktickú analýzu Zistiť, ktoré pravidlo treba použiť Testovať terminálne symboly na vstup (match) Počítať atribúty Uchovať v lokálnych premenných hodnoty atribútov potrebné pre výpočet zdedených atribútov neterminálnych symbolov v tele alebo syntetizovaných atribútov A. Volať funkcie pre neterminály tela (pravých strán pravidiel) so správnymi argumentami. (Pretože, sa jedná o L-atributovú syntaxou riadenú definíciu, tieto už boli vypočítané a mohli byť uchované v lokálnych premenných.) Zima 2009 Ján Šturc: Kompilátory - syntaxou riadený preklad 29

Implementácia pre LL(1) syntaktický analyzátor 1. L-atribútová definícia sa dá zorganizovať tak, že skutočné atribúty majú len neterminálne symboly. Terminálne symboly (tokens) majú len svoje lexikálne atribúty dostupné prostredníctvom tabuľky symbolov. 2. Sémantické akcie ukladáme do zásobniku formou dvoch typov položiek (records) Záznam pre zdedené atribúty obsahuje zdedené atribúty, neterminálu V, ktorý je v zásobníku bezprostredne pod ním. Táto položka obsahuje aj referenciu na sémantickú rutinu, ktorá počíta atribúty neterminálu V. Záznam pre syntetizované atribúty, nachádza sa v zásobníku bezprostredne pod neterminálom V, ktorému tieto atribúty patria. Môže tie obsahovať referenciu na sémantickú rutinu. 3. Vytváranie záznamov a prenosy atribútov sa vykonajú počas náhrady neterminálu na vrchole zásobníku. Program vie, ako hlboko v zásobniku sa potrebný záznam nachádza. Zima 2009 Ján Šturc: Kompilátory - syntaxou riadený preklad 30

Implementácia L-atribútových SRD a LR parsing 1. Budeme uvažovať L-atribútovú SRD, ktorá má syntaktické rutiny pre výpočet zdedených atribútov pred neterminálnymi sybolmi a rutiny pre výpočet syntetizovaných atribútov na konci pravidla pre daný neterminál. 2. Upravíme gramatiku tak, že namiesto každej sémantickej rutiny vo vnútri pravidla vložíme nový, nikde sa nevyskytujúci, neterminál (M 1, M 2,... ). Pre všetky značkovacie neterminály pridáme pravidlá M i ε. 3. Modifikujeme sémantické rutiny. Nech pôvodné A α{a}bβ je modifikované na A αmbβ. Pridáme pravidlo M i ε{a }. Kde a : Kopíruje atribúty A a symbolov α potrebné k výpočtu a ako zdedené atribúty neterminálu M. Vypočíta to isté ako a (zdedené atribúty B) ako syntetizované atribúty M. Je to porušenie zásobníkovej disciplíny. Doteraz sa používali len atribúty symbolov v rámci pravidla. Nevadí, potrebné atribúty sú v LR zásobniku. Pri kontext senzitívnej analýze tento problém nenastane (αmb αb). Zima 2009 Ján Šturc: Kompilátory - syntaxou riadený preklad 31

Metóda nedodržujúca zásobníkovú disciplínu Vo všeobecnosti nie je potrebné dodržať zásobníkovú disciplínu. V tomto prípade syntaktická analýza a sémantika pracujú ako coroutines dva programy, z ktorých každý ma svoje dátové štruktúry a svoj stav. Syntaktická analýza, môže kedykoľvek prerušiť svojú prácu a požiadať sémantiku, aby vykonala nejakú rutinu. Sémantika ju vykoná a výsledok si zapamätá vo svojich štruktúch. (V podstate sémantika je objekt, ktorý ponúka svoje metódy syntaktickej analýze.) Po skončení (akceptovaní) sémantika, alebo má výsledok, alebo ho vygenerovala v priebehu práce. Dá sa urobiť viac ako L-atribútové prekladové schémy. Použitie metódy je silne závislé od kvality programátora. Zima 2009 Ján Šturc: Kompilátory - syntaxou riadený preklad 32

Zacyklenie cirkulárne SRD Môže sa stať, že sa pre niektoré slová vypočet atribútov zacyklí. Zacyklené atribúty sa vo všeobecnosti nedajú vypočitať. Testovanie, či sa výpočet zacyklí pre dané slovo je jednoduché: Vytvoríme ozdobený syntaktický strom, graf závislosti atribútov, zistíme, či graf obsahuje cyklus. Def.: Hovoríme, že atribútová gramatika (SRD) je cirkulárna, ak jazyk generovaný gramatikou obsahuje slovo, na ktorom sa výpočet atribútov zacyklí. Je to rozhodnuteľné. Stačí vyskúšať konečný počet slov. Pumpovacia lema. Ak k zacykleniu nedôjde pri vyskušaní slov αυ k βω k γ, pre k {0,1,2}, už k nemu nedôjde nikdy. Je to ťažké, problém je NP-úplný. Otázky cirkularity majú len teoretický význam pre celkový stav oblasti. Z hľadiska praxe sú nedôležité. Zima 2009 Ján Šturc: Kompilátory - syntaxou riadený preklad 33