210 likes | 330 Views
Generovanie cieľového prgramu zo stromu. Cieľového kódu. Základ pre algoritmus generovania inštrukcií. Vyu žíva sa rekurzívna štruktúra stromu – každý podstrom je strom Elementárny strom je koncový vrchol Ohodnotenie vrcholov Vnútorných operátormi Koncových operandami
E N D
Generovanie cieľového prgramu zo stromu Cieľového kódu
Základ pre algoritmus generovania inštrukcií • Využíva sa rekurzívna štruktúra stromu – každý podstrom je strom • Elementárny strom je koncový vrchol • Ohodnotenie vrcholov • Vnútorných operátormi • Koncových operandami • Dôsledok tohoto ohodnotenia • Ak má vrchol nasledovníkov, vyhodnocujú sa najprv nasledovníci • Vyhodnotenie stromu sa realizuje „prechádzaním stromu
Vzťah stromovej reprezentácie a triád • Triada zodpovedá stromu s ohodnotením • Vrchol operátor triady • Nasledovníci zodpovedajú operandom triády
Príklad Majme výraz (a * b + c) * (d – e) / ( - f) V triádach a v strome mu zodpovedá
Triády a strom daného príkladu • *, a, b • +, (1), c • -, d, e • *, (2), (3) • NEG, , f • /, (4), (5) / * NEG + - f c d e * a b
Algoritmus • Vstup: program (aritmetický výraz) v postfixe • Výstup: postupnosť inštrukcií • Algoritmus očísluje vrcholy stromu číslami určujúcimi poradie vyhodnocovania – realizácie operácií • Ďalej používa rekurzívnu procedúru KOMP, ktorú aplikuje na koreň stromu • Algoritmus je riadený tabuľkami • Operandami teraz môžu byť: zhromažďovač, adresa, vnútorný vrchol – budeme sa naň odvolávať cez jeho číslo.
Algoritmus – metóda • Očísluj vnútorné vrcholy stromu (zhora nadol, zľava doprava) • Použi procedúru Komp na koreň stromu
Príklad Majme aritmetický výraz zo slidu : 4 a 5
Výsledok očíslovania vnútorných vrcholov • *, a, b • +, (1), c • -, d, e • *, (2), (3) • NEG, , f • /, (4), (5) / 6 4 * NEG 5 + - 2 3 f 1 c d e * a b
Generovanie inštrukcií Činnosť Operácia Vybratá položka Generované inštrukcie Komp(6) /, (4), (5) Komp(5) Return Komp(5) NEG, , f LOAD a CHZ LOAD f CHZ Return (5) STORE Ti Komp(4) DIV Ti Komp(6) /, (4), Z STORE T1
Generovanie inštrukcií – Cont. Komp(4) *, (2), (3) Komp(2) Return Komp(2) +, (1), c Komp(1) ADD A(P) Komp(1) *, a, b LOAD A(L) MPY A(P) LOAD a MPY b Return (1) ADD c Retutn (2)
Generovanie inštrukcií – Cont Komp(4) *, Z, (3) STORE Ti KOMP(3) MPY Ti STORE T2 Komp(3) -, d, e LOAD A(L) SUB A(P) LOAD d SUB e Retutn (3) MPY T2 Retutn (4) DIV T1 Retutn (6)