Ciele
- Oboznámiť sa s inštrukciami Java Virtual Machine (JVM).
- Naštudovať atribúty výrazov a spôsob prekladu konštánt (výrazov).
- 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
-
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 JVMPoznámka: Podrobnejšiu dokumentáciu a prehľad ostatných inštrukcií nájdete na samostatnej stránke.
-
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 tvareINT LOZAT Vyraz POZAT
(vprim.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
Zdroje