Vaje - Predstavitev kode

Vaje - Pregledovalnik

Za izvedbo zbirnika lahko uporabite predhodno pripravljene razrede, ki so na voljo na eučilnici.

Cilj je izdelava programa, ki prebere podano datoteko (z izvorno kodo v SIC/XE zbirniku), jo pretvori v interno obliko predstavitve (AST), nato pa izpiše zgrajeno. Dobili boste tako imenovani "pretty print" program.

Predstavitev kode

a) Poznamo več različnih vrst ukazov (tudi direktive, komentar). Za vsako vrsto ukazov naredite svoj razred, ki naj bo izpeljan iz osnovnega razreda Node. Potrebovali boste torej še naslednje razrede:

  • Comment - komentarji;
  • InstructionF1 - ukazi formata 1;
  • InstructionF2 - ukazi formata 2;
  • InstructionF3 - ukazi formata 3;
  • InstructionF4 - ukazi formata 4;
  • Directive - direktive kot so START, END, ...;
  • Storage - pomnilniške direktive BYTE, WORD, RESB, RESW.

Za vsak ukaz oz. razred razmislite, katere podatke (operandi itd.) potrebujete. Razrede boste kasneje (naslednje vaje) dopolnili z metodami za razreševanje simbolov in generiranje kode.

b) Potrebovali boste še razred Code, ki bo predstavljal celoten zbirniški program. Hrani naj ime programa, seznam ukazov, lokacijski števec itd. V ta razred boste kasneje prav tako dodali metode za razreševanje simbolov, generiranje objekte kode itd.

Predstavitev mnemonikov

Mnemonik je simbolično ime za ukaz. Razdelimo jih v več skupin - glede na formate, vrsto operandov ipd. Zopet bomo izhajali iz abstraktnega razreda Mnemonic, ki vsebuje ime mnemonika, morebitno operacijsko kodo, opis mnemonika (potrebno za izpis pomoči). Pomembna pa bo tudi meotda:

ki prebere in razpozna (morebitne) operande, ki sledijo mnemoniku. Nato pa vrne predstavitev ukaza kot objekt enega izmed razredov iz predhodne naloge.

Za vsako vrsto mnemonikov in operandov bomo naredili svoj razred, npr.

  • MnemonicD - direktiva brez operandov (NOBASE, LTORG);
  • MnemonicDn - direktiva z enim številskim operandom (lahko tudi simbol) (START, END, ...);
  • MnemonicF1 - ukaza formata 1 (brez operandov) (FIX, FLOAT, ...);
  • MnemonicF2n - F1 z enim številskim operandom (SVC);
  • MnemonicF2r - F1 z enim registrskim operandom (CLEAR, TIXR);
  • MnemonicF2rn - F1 z enim registrskim in enim številskim operandom (SHIFTL, SHIFTR);
  • MnemonicF2rr - F1 z dva registrskima operandoma (ADDR, ...);
  • MnemonicF3 - F3 brez operandov (RSUB);
  • MnemonicF3m - F3 z enim operandom (LDA, ...);
  • MnemonicF4m - F4 z enim operandom (+LDA, ...);
  • MnemonicSd - pomnilniška direktiva s podatki (BYTE, WORD);
  • MnemonicSn - pomnilniška direktiva za rezervacijo (RESB, RESW).

Za vsakega bo potrebno povoziti metodo parse().

Sintaksna analiza

Za sintaksno analizo izvorne kode lahko uporabite razreda Lexer in Parser, dana v okviru vaj. Vaša naloga je predvsem, da napište razpoznavanje operandov (glej predhodno nalogo). Naloge se lotite po sklopih, npr. najprej ukazi formata 1, formata 2 itd.

Last modified: Tuesday, 8 December 2015, 12:55 PM