DU5

Úvodní kurz překladačů se soustřeďuje zejména na teoretické i praktické základy konstrukce přední části překladače. Součástí předmětu je i cvičení zaměřující se na základy práce s nástroji pro konstrukci překladačů. Po absolvování tohoto kurzu bude posluchač schopen sestrojit vlastní překladač do mezikódu nebo jiného jazyka.
Jochanan
Matfyz(ák|ačka) level II
Příspěvky: 85
Registrován: 12. 5. 2007 15:58
Typ studia: Informatika Mgr.
Kontaktovat uživatele:

Re: du5

Příspěvek od Jochanan »

Návštěvník píše:Mam asi dost blby dotaz - ale jak vubec prijdu k tomu vystupu .moa? predpokladam, ze -Sfile mi hodi file.mo ale jak z toho dostanu tu textovou verzi?
to me hazi rovnou to moa
Návštěvník

Re: du5

Příspěvek od Návštěvník »

A mohl bys mi tady ten prikaz cely prosim napsat?
Tom
Matfyz(ák|ačka) level I
Příspěvky: 17
Registrován: 1. 1. 2007 22:29
Typ studia: Informatika Mgr.

Re: du5

Příspěvek od Tom »

Návštěvník píše:A mohl bys mi tady ten prikaz cely prosim napsat?
Tady je:

Kód: Vybrat vše

mlc.exe du5-test1.mls du5-test1-my.mo -Sdu5-test1-my.moa >> du5-test1-my.out
Návštěvník

Re: du5

Příspěvek od Návštěvník »

Dik moc, ted uz mi to jde. Chybel mi tam ten soubor .mo mezi vstupem a parametrem -S
Uživatelský avatar
tommy
Matfyz(ák|ačka) level I
Příspěvky: 24
Registrován: 1. 6. 2006 13:55

Re: du5

Příspěvek od tommy »

Vobec to nebol blby dotaz ;-) Dik. Neviem ako som to mal vediet, ked mi to nikto nepovedal...
There's nothing left to lose.
Uživatelský avatar
hippies
Admin(ka) level I
Příspěvky: 990
Registrován: 29. 9. 2004 12:46
Typ studia: Informatika Mgr.
Bydliště: Mladá Boleslav
Kontaktovat uživatele:

Re: du5

Příspěvek od hippies »

co je ktera pripona zac je na strankach ulity a jak pouzit mls se da vycist z mainu
Chjo, dovede te si představit svět, kde by byla každá harmonická diferenciální forma (jistého typu) nesingulární projektivní algebraické variety racionální kombinací kohomologických tříd algebraických cyklů..
omikr0n
Matfyz(ák|ačka) level I
Příspěvky: 1
Registrován: 26. 12. 2007 11:59
Typ studia: Informatika Bc.

Re: DU5

Příspěvek od omikr0n »

No tak rovnaky problem mam aj ja. Stale dostavam ERROR: Requested bad value type on IP=??? na instrukcii RET.
Zistil som, ze ked na konci procedury (pred RET) vygenerujem DTORI, DTORR, DTORS instrukcie, ktore odinicializuju parametre procedury, tak mi toto funguje, bez DTORX instrukcii nie:

Kód: Vybrat vše

program test;
procedure writearg(s : string);
begin
 writes(s);
end;

begin
 writearg('test');
end.
Takze to podla mna vyzera tak, ze podklady na DU5 negeneruju tieto instrukcie same tak, ako by mali.
Tom
Matfyz(ák|ačka) level I
Příspěvky: 17
Registrován: 1. 1. 2007 22:29
Typ studia: Informatika Mgr.

Re: DU5

Příspěvek od Tom »

Nevíte někdo, jak se pracuje s konstantama?

S proměnnýma je to jasný.
U nich se použije funkce
variable_symbol::address()
pro získávání offsetu a výsledek se dá jako parametr instukci
ai::xLDy(stack_address)
kde x {Localni, Globalni} a y {Bool, Integer, Real, String}.

Jak je to ale u konstant?
Myslim, ze se tam pouzije instukce ai::LDLITy, ale co mam dat jako parametr a jak ho ziskam?

Diky za kazdou radu.
Uživatelský avatar
Petr-H
Matfyz(ák|ačka) level II
Příspěvky: 81
Registrován: 30. 1. 2006 14:18
Typ studia: Informatika Mgr.
Bydliště: VŠK 17. listopadu
Kontaktovat uživatele:

Re: DU5

Příspěvek od Petr-H »

Tom píše:Nevíte někdo, jak se pracuje s konstantama?

S proměnnýma je to jasný.
U nich se použije funkce
variable_symbol::address()
pro získávání offsetu a výsledek se dá jako parametr instukci
ai::xLDy(stack_address)
kde x {Localni, Globalni} a y {Bool, Integer, Real, String}.

Jak je to ale u konstant?
Myslim, ze se tam pouzije instukce ai::LDLITy, ale co mam dat jako parametr a jak ho ziskam?

Diky za kazdou radu.
Jako hodnotu instrukce LDLIT* použiješ přímo hodnotu konstanty resp. odkaz do tabulky. Tedy např. pro načtení celočíselné konstanty použiješ tento kód

Kód: Vybrat vše

LDLITI(symbol_pointer->access_const()->access_int_const()->int_value())
Pro ostatní typy obdobně :wink:
Jochanan
Matfyz(ák|ačka) level II
Příspěvky: 85
Registrován: 12. 5. 2007 15:58
Typ studia: Informatika Mgr.
Kontaktovat uživatele:

Re: du5

Příspěvek od Jochanan »

No, zacal jsem delat rozsirenou verzi a narazil jsem na nekolik problemu...
1. kdyz mam record, ten obsahuje polozky a,b treba. A xR je jeho instance.
potom mi neexistuje symbol_pointer na polozku b (ani a), kdyz nacitam promennou, tak vzdycky kontroluju sp
takze nejdriv to nacte xR, to je v poho, ale u b to napise, ze ho nezna...

2. stejne tak to kupodivu nevi, jestli je to b globalni, nebo lokalni promenna...

3. To znamena, ze u prirazeni xR.b := 10; mi to zahlasi i u prirazeni, ze b neni globalni ani lokalni...

4. jak ziskat adresy tech polozek recordu.
a) polozek
b) celych recordu

Protoze me osobne treba spadne, kdyz zkusim neco jako
tmp = xR->sp->access_global_variable()->address(); || tmp = xR->sp->access_local_variable()->address();
a potom forcyklus
tmp = tmp + (vsechny nazvy po ceste)->sp->access_variable()->type()->access_record()->find( (vsechny nazvy po ceste)->id)->offset();

5. je nejaky rozdil mezi
access_global_variable()
access_local_variable()
access_variable()
a jaky?

6. pokud nekde ve faktoru zjistim, ze ten identifikator je record, jak dosadim do typu, ze to je RECORD a ze to je ten konkretni record, abych to u
promenna := vyraz dokazal zkontrolovat?
rastiq

Re: du5

Příspěvek od rastiq »

Jochanan píše: 6. pokud nekde ve faktoru zjistim, ze ten identifikator je record, jak dosadim do typu, ze to je RECORD a ze to je ten konkretni record, abych to u
promenna := vyraz dokazal zkontrolovat?
Mozno trieskam, ale myslim ze ten $$.typ by mal byt type_pointer. Takze ak je to record tak tam das to co sa ti po vytvoreni toho tvojho recordu vrati a potom to budes moct kontrolovat. Ak to nie je record ale napr real tak tam ide logical_real atp... Take nieco mam v poznamkach z cvika.
Tom
Matfyz(ák|ačka) level I
Příspěvky: 17
Registrován: 1. 1. 2007 22:29
Typ studia: Informatika Mgr.

Re: du5

Příspěvek od Tom »

Tacoud píše:du5-test3 mi vyhazuje ty samé chyby. Vypadá to, že změnili testovací mls soubor, ale přibalili starý output . :?
Souhlasim s Tacoudem, mam stejny problem.
Jochanan
Matfyz(ák|ačka) level II
Příspěvky: 85
Registrován: 12. 5. 2007 15:58
Typ studia: Informatika Mgr.
Kontaktovat uživatele:

Re: du5

Příspěvek od Jochanan »

rastiq píše:
Jochanan píše: 6. pokud nekde ve faktoru zjistim, ze ten identifikator je record, jak dosadim do typu, ze to je RECORD a ze to je ten konkretni record, abych to u
promenna := vyraz dokazal zkontrolovat?
Mozno trieskam, ale myslim ze ten $$.typ by mal byt type_pointer. Takze ak je to record tak tam das to co sa ti po vytvoreni toho tvojho recordu vrati a potom to budes moct kontrolovat. Ak to nie je record ale napr real tak tam ide logical_real atp... Take nieco mam v poznamkach z cvika.
Jasne, ale to udelas jak? Kdyz mas type_pointer z ty promenny a type_pointer z vyrazu, jak je porovnas, ze jsou stejnyho typu? Protoze tp==tp nejde.
Uživatelský avatar
Soptik
Matfyz(ák|ačka) level I
Příspěvky: 25
Registrován: 25. 12. 2004 12:15
Typ studia: Informatika Mgr.
Bydliště: Praha, Uhříněves
Kontaktovat uživatele:

Re: du5

Příspěvek od Soptik »

Jochanan píše:Jasne, ale to udelas jak? Kdyz mas type_pointer z ty promenny a type_pointer z vyrazu, jak je porovnas, ze jsou stejnyho typu? Protoze tp==tp nejde.
na to mame "krasnou funkci" identical_type (tp1, tp2) ze 4.ukolu ;-)
Jochanan
Matfyz(ák|ačka) level II
Příspěvky: 85
Registrován: 12. 5. 2007 15:58
Typ studia: Informatika Mgr.
Kontaktovat uživatele:

Re: du5

Příspěvek od Jochanan »

Soptik píše:
Jochanan píše:Jasne, ale to udelas jak? Kdyz mas type_pointer z ty promenny a type_pointer z vyrazu, jak je porovnas, ze jsou stejnyho typu? Protoze tp==tp nejde.
na to mame "krasnou funkci" identical_type (tp1, tp2) ze 4.ukolu ;-)
Ta funkce je opravdu super :) uz jsem se bal, ze to zase budu muset nejak extra prolejzat...
Odpovědět

Zpět na „SWI098 Principy překladačů“