Zbierka úloh

01. Celočíselná kalkulačka pomocou Lex a Yacc
Úlohy:
    Úloha: Stiahnite si zdrojové texty projektu jednoduchého celočíselného kalkulátora a rozbaľte ho. Spustite NetBeans a otvorte projekt.
    Úloha: Skomilujte projekt pomocou tlačidla kladivo a následne spustite kalkulátor stlačením tlačidla trojuholník v paneli nástrojov. Vyskúšajte zadať jednoduché aritmetické výrazy. Aké výrazy dokáže kalkulačka spracovať a aké nie?
    Úloha: Upravte calc1.l a calc1.y tak, aby kalkulačka umožňovala:
    1. umocňovanie: x^ má význam x*x
    2. faktoriál: x! má význam 1*2* ... * x (x>0)
    3. posun doľava: x<<y má význam posunu x o y-bitov doľava
    4. posun doprava: x>>y má význam posunu x o y-bitov doprava
02. Reálnočíselná kalkulačka
Úlohy:
    Úloha: Preštudujte si implementáciu reálnočíselnej kalkulačky. Ako sa v akciách vo vstupnom súbore pre Yacc pristupuje k prenášaným hodnotám? Používa sa identifikátor typu (napríklad $1.ihod)?
    Úloha: Upravte calc2.l a calc2.y, aby kalkulačka umožňovala:
    1. int(vyraz), kde výsledkom bude celočíselná hodnota výrazu
    2. x@y, kde výsledkom bude y-ta (y — celé číslo) mocnina x (celé alebo reálne číslo)
    3. Relačné operátory <, <=, >, >=, ==, !=, kde výsledkom bude 0 alebo 1
    4. x ? y : z, kde výsledkom bude y, ak hodnota x bude nenulová a výsledkom bude z, ak hodnota x bude nulová
03. Syntaktická analýza jazyka JMM
Úlohy:
    Úloha: Experimentujte s dodaným analyzátorom. Použite pri tom vzorový vstupný súbor "vstup0.jmm". Aké konštrukcie jazyka JMM dokáže analyzátor akceptovať a aké nie?
    Poznámka: Na triedy sa zatiaľ odkazuje pomocou špeciálneho zápisu: @MenoTriedy
    Úloha: Preštudujte si kód analyzátora a doplňte rozpoznávanie príkazov forswitch. Pre testovanie použite súbor "vstup1.jmm".
    Úloha: Ošetrite možnosť použitia viacerých príkazov v case vetvách a tiež použitie príkazu break. Zabezpečte, aby sa príkazy case a default nemohli používať mimo príkazu switch.
04. Spracovanie deklarácie triedy JMM
Úlohy:
    Úloha: V zdrojových kódoch prekladača sa oboznámte sa so štruktúrami pre uchovanie informácii o triedach, s funkciami pre prácu s nimi a s ich použitím v prekladači.
    Úloha: Doplňte výstup zdedených dátových členov a metód (do funkcie vypisTriedy) v tvare:
    • pre zdedené dátové členy:
      .inheritedfield <modifikátory-prístupu> <meno> <signatúra-typu>
    • pre zdedené metódy:
      .inheritedmethod <modifikátory-prístupu> <meno> <signatúra-metódy>
    Poznámka: Takéto klauzuly nie sú platnými v jazyku Jasmin a ich výpis slúži len na ukážku práce s údajovými štruktúrami obsahujúcimi informácie o triedach.
    Príklad: Doplňte do prekladača podporu pre implementáciu rozhraní. Zabezpečte, aby pri použití klauzuly implements v definícii triedy, bola pre každé implementované rozhranie vygenerovaná do výstupného JAL súboru direktíva v tvare:
    .implements <meno-rozhrania>
    Poznámka: Pre uchovanie informácií o implementovaných rozhraniach potrebujete pridať novú položku do tabuľky tried a doplniť akcie k pravidlu ImpRozhrania, ktorá tieto uchová index implementovaného rozhrania v tabuľke tried.
05. Preklad primárnych výrazov
Úlohy:
    Úloha: Oboznámte sa s potrebnými inštrukciami JVM
    Úloha: Oboznámte sa s vytvoreným prekladačom. Vyskúšajte prekladač na jednoduchom príklade (prim.jmm, prim.htm).
    Ú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
06. Preklad lokálnych premenných a volania metód JMM
Úlohy:
    Úloha: Oboznámte sa s implementáciou prekladu lokálnych premenných v prekladači.
    Úloha: Oboznámte sa s implementáciou týchto funkcií v zdrojovom kóde prekladača.
    Úloha: Oboznámte sa s implementáciou prekladu volania metód v kóde prekladača. Dôležité je prejsť si spracovanie symbolov MetVolanie, NepArgumenty a Argumenty. Vyskúšajte prekladač na jednoduchom príklade (ahoj.jmm)
    Úloha: Doplňte operátory inkrementácie a dekrementácie pre lokálne premenné (k neterminálnemu symbolu Primarny) v tvare:
    
    ID ++
    ++ ID
    ID --
    -- ID
    ID += Vyraz
    ID -= Vyraz
    
    Otestujte funkčnosť doplneného prekladača na príkladoch postupným odstraňovaním znakov komentára v súbore ahoj.jmm
07. Preklad dátových členov JMM
Úlohy:
    Úloha: Oboznámte sa s vytvoreným prekladačom. Vyskúšajte prekladač na jednoduchom príklade (ahoj.jmm)
    Úloha: Doplňte implementáciu operátorov inkrementácie (INC) a dekrementácie (DEC) pre inštančné členské premenné (this.meno):
    
    DCPrirad :  ...
             | Vyraz BODKA ID INC
             | INC Vyraz BODKA ID 
             | Vyraz BODKA ID DEC
             | DEC Vyraz BODKA ID
    
08. Preklad výrazov s operátormi JMM
Úlohy:
    Úloha: Oboznámte sa s vytvoreným prekladačom. Vyskúšajte prekladač na jednoduchom príklade (ahoj.jmm)
    Úloha: Doplňte implementáciu operátorov:
    • % – (zvyšok po delení [kód ZVYS]),
    • ! – (negácia [kód NOT])
    • ? : – (podmienkový výraz [kódy OTAZ DBOD])
    pre neterminálny symbol Vyraz.
    
    Vyraz	:  ...
            | Vyraz ZVYS Vyraz
            | NOT Vyraz
            | Vyraz OTAZ Vyraz DBOD Vyraz
    
    Pre implementáciu operácie % možno využiť funkciu binAritVyraz(). Pre implementáciu sú potrebné JVM inštrukcie irem, drem, ixor, goto, ifeq.
09. Preklad príkazov
Úlohy:
    Úloha: Oboznámte sa s vytvoreným prekladačom. Vyskúšajte prekladač na jednoduchých príkladoch (acyklus.jmm, grtest.jmm)
    Úloha: Doplňte príkaz cyklu FOR so syntaxou (acyklus.jmm):
    Prikaz -> for ( VoidVyraz ; Vyraz ; VoidVyraz ) Prikaz
comments powered by Disqus