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 »

Tak me jeste napada, nevite nekdo, jestli se ma nejak jinak extra testovat to, jestli je neco polozka recordu?
protoze zatim, kdyz zkusim !$$.tp->access_record()->find($3) a $3 neni polozka toho recordu, tak to proste zuchne a na if se nedostane... :)
qk
Matfyz(ák|ačka) level III
Příspěvky: 181
Registrován: 24. 2. 2005 10:03
Typ studia: Informatika Mgr.
Kontaktovat uživatele:

Re: du5

Příspěvek od qk »

Jochanan píše:
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...
tak funkce je pekna, ale dost naprd :) protoze stejne musis rozlisovat int<->real,ktery se na se be prevadeji.
Don't worry, be dead
qk
Matfyz(ák|ačka) level III
Příspěvky: 181
Registrován: 24. 2. 2005 10:03
Typ studia: Informatika Mgr.
Kontaktovat uživatele:

Re: du5

Příspěvek od qk »

Jochanan píše:Tak me jeste napada, nevite nekdo, jestli se ma nejak jinak extra testovat to, jestli je neco polozka recordu?
protoze zatim, kdyz zkusim !$$.tp->access_record()->find($3) a $3 neni polozka toho recordu, tak to proste zuchne a na if se nedostane... :)
$$.tp->cat() ==TCAT_RECORD
Don't worry, be dead
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 »

qk píše:
Jochanan píše:Tak me jeste napada, nevite nekdo, jestli se ma nejak jinak extra testovat to, jestli je neco polozka recordu?
protoze zatim, kdyz zkusim !$$.tp->access_record()->find($3) a $3 neni polozka toho recordu, tak to proste zuchne a na if se nedostane... :)
$$.tp->cat() ==TCAT_RECORD
tp je urcite record, ale pokud ten find nic nenajde, tak neni nijak zabezpecenej proti ! a cely to spadne.
D
Matfyz(ák|ačka) level I
Příspěvky: 32
Registrován: 20. 12. 2006 17:42

Re: DU5

Příspěvek od D »

Ako teda riesite to odinicializovanie parametrov pred koncom procedury aby to nepadlo? Nepisali ste niekto vyucujucemu?
banan
Matfyz(ák|ačka) level I
Příspěvky: 40
Registrován: 14. 6. 2005 14:50
Typ studia: Informatika Bc.
Bydliště: Troja

Re: DU5

Příspěvek od banan »

D píše:Ako teda riesite to odinicializovanie parametrov pred koncom procedury aby to nepadlo? Nepisali ste niekto vyucujucemu?
Podla cviceni sa o pridavanie parametrov a ich _odstranenie_ zo stacku mame starat my. Tabulky za teba parametre zo stacku odstranovat nebudu - musis to zariadit sam pomocou DTORx. Btw, podla volacej konvencie sa o predavanie a mazanie parametrov zo stacku stara volajuci kod (caller), takze parametre urcite nesmies odstranovat pred ukoncenim procedury, ale az po jej ukonceni (inymi slovami: DTORx davas za CALL instrukciu).

pozri: http://forum.matfyz.info/viewtopic.php?f=183&t=3889
D
Matfyz(ák|ačka) level I
Příspěvky: 32
Registrován: 20. 12. 2006 17:42

Re: DU5

Příspěvek od D »

Aha diky moc. Uz som si to tam doplnil a zacalo to fungovat ;-)
D
Matfyz(ák|ačka) level I
Příspěvky: 32
Registrován: 20. 12. 2006 17:42

Re: DU5

Příspěvek od D »

A este jeden dotaz mam na DIVI v testovacom priklade 3. Podla jeho vystupu dava na zasobnik operandy v opacnom poradi ako by podla mna mali byt na zaklade obrazku v popise instrukcie DIVI. Konkretne ked je "A div B" tak ja dam na zasobnik A,B,DIVI, kdezto on dava B,A,DIVI. Ako je to teda spravne?
banan
Matfyz(ák|ačka) level I
Příspěvky: 40
Registrován: 14. 6. 2005 14:50
Typ studia: Informatika Bc.
Bydliště: Troja

Re: DU5

Příspěvek od banan »

Spravne "A div B" je "A,B,DIVI", teda tak ako to uz mas. Subormi du5-test3.moa a du5-test3.mo sa velmi riadit netreba - vsimni si napr, ze v du5-test3.mls je konstanta 'f' rovna 500000, zatialco v du5-test3.moa najdes 1e0-10. Vystup du5-test3.icmout je vsak spravny - mozes sa nim riadit.
qk_

Re: DU5

Příspěvek od qk_ »

Tak taky mam dotaz, funguje nekomu spravne generovani INITu pro struktury?
banan
Matfyz(ák|ačka) level I
Příspěvky: 40
Registrován: 14. 6. 2005 14:50
Typ studia: Informatika Bc.
Bydliště: Troja

Re: DU5

Příspěvek od banan »

qk_ píše:Tak taky mam dotaz, funguje nekomu spravne generovani INITu pro struktury?
Vytvorenie miesta na stacku pre record by som robil presne tak isto ako ulozenie recordu na stack - rekurzivne prechadzat polozky recordu od prveho k poslednemu a priebezne generovat instrukcie INITx vhodneho typu. Inak, neviem co by ta viedlo k implementacii takej feature. Napada mi jedine pouzitie recordu ako return value, co je vsak zakazane. Alebo som na nieco zabudol?
qk_

Re: DU5

Příspěvek od qk_ »

banan píše:
qk_ píše:Tak taky mam dotaz, funguje nekomu spravne generovani INITu pro struktury?
Vytvorenie miesta na stacku pre record by som robil presne tak isto ako ulozenie recordu na stack - rekurzivne prechadzat polozky recordu od prveho k poslednemu a priebezne generovat instrukcie INITx vhodneho typu. Inak, neviem co by ta viedlo k implementacii takej feature. Napada mi jedine pouzitie recordu ako return value, co je vsak zakazane. Alebo som na nieco zabudol?
nn, mne se to nedelalo pri uvodni generovani lokalnich promennych..ale sem zjistil ze existuje funkce create_field :)...ony to pole nemeli no.
atombomb
Matfyz(ák|ačka) level I
Příspěvky: 22
Registrován: 18. 1. 2007 13:11

Re: DU5

Příspěvek od atombomb »

ako je mozne nejak pekne urobit kod pre napr
a = 1; ?(ide hlavne o tu jednotku, ze by som ju rad na vrchole zasobnika)
viem ze by asi slo si vytvorit konstantu (alebo pomocnu globalnu/lokalnu premennu), a az by bolo treba tak ju naloadovat na zasobnik, ale to mi pride dost osemetne, dost by sa hodila instrukcia ktora hodi na zasobnik priamo hodnotu, taketo instrukcie som vsak nasiel len pre registrovy stroj. vie niekto o pouzitelnejsom rieseni?
banan
Matfyz(ák|ačka) level I
Příspěvky: 40
Registrován: 14. 6. 2005 14:50
Typ studia: Informatika Bc.
Bydliště: Troja

Re: DU5

Příspěvek od banan »

Myslim, ze nemusis vytvarat konstantu - staci pridat '1' do integer literal storage-u, tj ls_int.add(1) a vrateny iterator pouzit v instrukcii LDLITI. Skutocnosti, ze pridavas na stack hodnotu nepriamo (pomocou iteratora), sa netreba bat - je to len technicky detail.
atombomb
Matfyz(ák|ačka) level I
Příspěvky: 22
Registrován: 18. 1. 2007 13:11

Re: DU5

Příspěvek od atombomb »

diky, to znie rozumne :)
edit: a vlastne nie je potrebne pridavat nejaky const symbol do tabuliek, lebo iterator na neho dostavame priamo ako 'hodnotu' konkretneho literalu (teda UINT a pod)
Naposledy upravil(a) atombomb dne 30. 12. 2007 20:10, celkem upraveno 1 x.
Odpovědět

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