260 likes | 383 Views
Vnútorné formy -vnútorné jazyky. Motív. Zložitosť procesu prekladu Flexibilita Efektívnosť. Sémantická reprezentácia. Zápisu programu vo vnútornom jazyku hovoríme i sémantická reprezentácia Vyjadrujeme v ňom už „ČO“ a „AKO“ sa bude robiť Vyjadrujeme už následnosť vykonávania operácií.
E N D
Motív • Zložitosť procesu prekladu • Flexibilita • Efektívnosť
Sémantická reprezentácia • Zápisu programu vo vnútornom jazyku hovoríme i sémantická reprezentácia • Vyjadrujeme v ňom už „ČO“ a „AKO“ sa bude robiť • Vyjadrujeme už následnosť vykonávania operácií
Požiadavky na vnútorný jazyk • Jednoduchší preklad „DO“ • Jednoduchší preklad „Z“ • Jednoduchšie operovanie „NAD“ daným jazykom
Flexibilita a efektívnosť • Vnútorné jazyky umžňujú flexibilnejšie a efektívnejšie využívať spoločné časti prostredia pre tvorbu prekladačov • Ak máme n zdrojových jazykov a m cieľových jazykov, využíva sa nasledujúca schéma
Prostredie pre viac zdrojových a cieľových jazykov ZJ1 CJ1 ZJ2 CJ2 VJ Sémanitcká reprezentácia ZJn CJm
Najčastejšie vnútorné jazyky • Prefix / postfix • Tetrády / triady • Strom
Prefix / postfix • Operátory sú • Pred operandami – prefix • Za operandami – postfix
Vo vzťahu ku klasickému infixu • Operandy sú v rovnakom poradí • Operátoty – v poradí, ako sa majú vykonávať
Aritmetický výraz - Príklad Infixový zápis Postfixový zápis a + b a b + a b c * + a + b * c sin(a) a sin (a + b) * (c – d / f) a b + c d f / - * a := sin(a – b) + a * b / c a a b – sin a b * c /+ :=
Deklarácia poľa, Indexovaná premenná Infixový zápis Postfixový zápis A[d1:h1, …, dn:hn] A, d1,h1, …, dn,hn, DCLA A[i1, i2, …, in] A, i1, i2, …, in, SUBS
Skok Infixový zápis Postfixový zápis Skok Nepodmienený GOTO L L JU Jump Unconditional Sko Podmienený Jump if True if b then GOTO L b L JIFT Jump if False b L JIFF
Podmienený príkaz Infixový zápis Postfixový zápis b L2 JIFF P1 Lza JU P2 L2 – návestie príkazu P2 Lza – návestie príkazu bezprostredne za daným podmieneným príkazom If b then P1 else P2 Návestia L2 a Lza generuje prekladač
Príkaz cyklu while (test „pred“) Infixový zápis Postfixový zápis B Lza JIFF P Lpc JU Lpc – návestie vlastného príkazu cyklu Lza – návestie príkazu bezprostredne za daným príkazom cyklu while B do P Návestia Lpc a Lza generuje prekladač
Príkaz cyklu repeat (test „za“) Infixový zápis Postfixový zápis P B Lpc JIFF Lpc – návestie vlastného príkazu cyklu repeat P until B Návestie Lpc generuje prekladač
Príkazy nad zásobníkom prekladača TA adr - uloží adresu adr na vrch zásobníka TC k - uloží konštantu k na vrch zásobníka TL L - uloží návestie L na vrch zásobníka ST - uloží hodnotu na vrchu zásobníka na adresu, ktorá je pod vrchom zásobníka DR - uloží hodnotu z adresy na vrchu zásobníka do zásobníka (na vrch)
Ďalšie operátory BLOCKBEG – začiatok bloku BLOCKEND – koniec bloku Aritmetické, logické a relačné operátory budú jasné z kontextu
Strom • Využívajú sa vlastnosti stromu ako dátovej štruktúry • Hovoríme o abstraktnom syntaktickom strome (AST) • Ide o vrcholovo ohodnotený strom • Vnútorné vrchly sú ohodnotené operátormi • Koncové operandami
Aritmetický výraz a+b + a b := a := sin(a – b) + a * b / c + a a b – sin a b * c / +:= / sin - c * a b a b
Podmienený príkaz Infixový zápis Postfixový zápis If b then P1 else P2 If_príkaz b P1 P2 Bloky b, P1 a P2 treba rovnakým spôsobom „rozviesť“