Preklad primárnych výrazov

Ciele
  1. Oboznámiť sa s inštrukciami Java Virtual Machine (JVM).
  2. Naštudovať atribúty výrazov a spôsob prekladu konštánt (výrazov).
  3. Pochopiť princíp vytvárania kódu pre príkazy.
Úvod
    Na tomto cvičení sa zoznámite s generovaním kódu pre Java Virtual Machine (JVM). Výsledný prekladač bude schopný vytvoriť spustiteľné Java applety.
Postup
  1. JVM má zásobníkovú architektúru. To znamená, že spracovávané údaje nie sú uložené v registroch, ale v zásobníku. Väčšina inštrukcií JVM vyberá údaje, ktoré potrebuje spracovať, z vrcholu zásobníka a výsledok spracovania vkladá naspäť do zásobníka. Takáto architektúra cieľového stroja značne zjednodušuje generovanie kódu, keďže zásobník je veľmi vhodná údajová štruktúra pre spracovávanie vnorených výrazov.
    Úloha: Oboznámte sa s potrebnými inštrukciami JVM
    Poznámka: Podrobnejšiu dokumentáciu a prehľad ostatných inštrukcií nájdete na samostatnej stránke.
  2. Výsledkom spracovania príkazov v prekladači JMM je ich kód, teda inštrukcie JVM vo forme reťazca. Na rozdiel od príkazov, výrazy môžu byť použité ako súčasť väčších výrazov, takže je potrebné, aby výsledkom ich spracovania bol nielen kód, ale aj typ výsledku (signatúra). Takto bude možné vykonať typovú kontrolu a generovať rozdielne inštrukcie podľa typu spracovávanej hodnoty. Časti prekladača zodpovedné za preklad primárnych výrazov (konštánt) a základných príkazov si pozrite v prezentácii.
    Úloha: Oboznámte sa s vytvoreným prekladačom. Vyskúšajte prekladač na jednoduchom príklade (prim.jmm, prim.htm).
    Poznámka: Pre vygenerovanie class súboru z jal súboru použite tlačidlo . Následne môžete vygenerovaný applet spustiť pomocou tlačidla .
    Poznámka: Aby bolo možné vytvoriť spustiteľný applet, ktorého vykonanie sa prejaví na výstupe, je do JMM zaradený pomocný príkaz pre výpis výsledku výrazu na zadanú pozíciu:
    println (x,y) vyraz
    Úloha: Doplňte implementáciu konverzie hodnôt pomocou výrazu v tvare INT LOZAT Vyraz POZAT (v prim.jmm odstráňte symboly komentára).
    DOUBLE LOZAT Vyraz POZAT {$$.sig=...; $$.kod=...;}
    LONG LOZAT Vyraz POZAT {$$.sig=...; $$.kod=...;}
    Úloha: Doplňte rozpoznanie celočíselnej konštanty v 16-kovej sústave, napr. Ox10, 0xBABA, 0xda7a
    Poznámka: Pre vytvorenie class súboru z jal v systéme GNU/Linux je potrebné použiť program Jasmin. Ak používate PPVP plugin, uveďte cestu k jasmin.jar v jeho nastaveniach (Tools → Options → Miscellaneous → PPVP). Môžete tiež využiť pripravený Makefile.
Zdroje
  1. Zdrojové kódy pre cvičenie 5
  2. Inštrukcie JVM
  3. Prehľad najdôležitejších inštrukcií JVM
  4. Dokumentácia nástroja Jasmin
comments powered by Disqus