ICM divne chovani

Ú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.
fari

ICM divne chovani

Příspěvek od fari »

Narazil jsem na imho podivne chovani icm, k vstupu:

Kód: Vybrat vše

program test;
        var 
                arr1 : array[1..1] of integer;
begin   
        arr1[0] := 1;
end.
nageneruju vystup s instrukcemi:

Kód: Vybrat vše

Functions and procedures
READI:INTEGER   [0;2], used registers=0
READR:REAL      [3;5], used registers=0
READS:STRING    [6;8], used registers=0
WRITEI(P:INTEGER [size=1;stkoffs=-1])   [9;11], used registers=0
WRITER(P:REAL [size=1;stkoffs=-1])      [12;14], used registers=0
WRITES(P:STRING [size=1;stkoffs=-1])    [15;17], used registers=0
WRITELN [18;19], used registers=0
TEST    [20;29], used registers=0
        VAR
                ARR1:INTEGER[start=20;end=20;size=1;stkoffs=0]

Instructions
READI:
0:      FNCREADI
1:      LSTI    [-1]
2:      RET
READR:
3:      FNCREADR
4:      LSTR    [-1]
5:      RET
READS:
6:      FNCREADS
7:      LSTS    [-1]
8:      RET
WRITEI:
9:      LLDI    [-1]
10:     FNCWRITEI
11:     RET
WRITER:
12:     LLDR    [-1]
13:     FNCWRITER
14:     RET
WRITES:
15:     LLDS    [-1]
16:     FNCWRITES
17:     RET
WRITELN:
18:     FNCWRITELN
19:     RET
TEST:
20:     INITI
21:     LDLITI  LITINT[0]
22:     GREF    [0]
23:     LDLITI  LITINT[1]
24:     ADDP
25:     LDLITI  LITINT[0]
26:     SUBP
27:     XSTI
28:     DTORI
29:     HALT
a icm misto aby spadlo / vypsalo nejake nesmysli, tak se proste zacykli

dela vam to taky nekomu?
vidlak
Matfyz(ák|ačka) level I
Příspěvky: 20
Registrován: 10. 1. 2008 23:19
Typ studia: Informatika Bc.

Re: ICM divne chovani

Příspěvek od vidlak »

Chova se to podobne jako Pascal, takze v pripade zapisu nebo cteni mimo hranice pole je nedefinovany chovani programu a zalezi jenom na tom, co se zrovna prepsalo (muze se stat, ze si prepises telo prave vykonavaneho programu a to pak dela zajimavy veci).

Napr. pokud bys mel:

Kód: Vybrat vše

program test;
        var 
                i : integer;
                arr1 : array[1..1] of integer;
begin   
        arr1[0] := 1;
end. 
, tak by ti to tu 1 melo zapsat do promene i.
blabla
Matfyz(ák|ačka) level II
Příspěvky: 70
Registrován: 27. 1. 2010 23:14
Typ studia: Informatika Mgr.

Re: ICM divne chovani

Příspěvek od blabla »

sprava sa to u mna uplne rovnako, no nemyslim ze osetrenie toho aby sa to spravalo korektne patri do du5...
faymon

Re: ICM divne chovani

Příspěvek od faymon »

Jenom taková technická, jak to pouštíte?
Já pouštím icm.exe du5.mo stack, mám max tak asserion failed. Nic jsem nepřidával za instrukce zatím, pouze jsem vzal projekt icm, přeložil a vyrobil si v projektu mlc ten .mo soubor. To to pouštím nějak blbě nebo jim to opět nefunguje?
Uživatelský avatar
Armi
Matfyz(ák|ačka) level I
Příspěvky: 8
Registrován: 17. 1. 2008 12:00
Typ studia: Informatika Mgr.

Re: ICM divne chovani

Příspěvek od Armi »

Mne zase pre zmenu icm nevracia ziadny vystup, ked dam napr. writei(5). Co robim zle? Spustam rovnako ako kolega vyssie.
tomm

Re: ICM divne chovani

Příspěvek od tomm »

OT: Pozor, v plánu je odstávka SISu od středeční 18. hodiny až do čtvrteční půlnoci, tedy v době deadlinu 5. úkolu! :(
blabla
Matfyz(ák|ačka) level II
Příspěvky: 70
Registrován: 27. 1. 2010 23:14
Typ studia: Informatika Mgr.

Re: ICM divne chovani

Příspěvek od blabla »

faymon píše:Jenom taková technická, jak to pouštíte?
Já pouštím icm.exe du5.mo stack, mám max tak asserion failed. Nic jsem nepřidával za instrukce zatím, pouze jsem vzal projekt icm, přeložil a vyrobil si v projektu mlc ten .mo soubor. To to pouštím nějak blbě nebo jim to opět nefunguje?

ja to pustam vo VS2010, normalne som si otvoril dany solution a cez properties toho projektu som nastavil command line arguments na:
"vstupny subor" stack

a potom to spustil cez ctrl f5, vstupny subor je v uvodzovkach lebo som tam mal k nemu celu cestu a boli v nej nejake medzery.

inak velmi nerozumiem co ma znamenat "mam max tak assertion failed".
faymon

Re: ICM divne chovani

Příspěvek od faymon »

blabla píše:ja to pustam vo VS2010, normalne som si otvoril dany solution a cez properties toho projektu som nastavil command line arguments na:
"vstupny subor" stack
Tak to děláš to stejný co já, akorát já to dělám na řádce.
blabla píše:inak velmi nerozumiem co ma znamenat "mam max tak assertion failed".
No ten icm.exe se nepustí, spadne to. Už jsem z toho vytřískal windows hlášku co to po mně vůbec chce, je to "This application has requested the Runtime to terminate it in an unusual way." Nejspíš nějaký problém s MSVCIRT.DLL. Tuhle hlášku jsem ale dostal i když jsem se v dú4 pokusil projít vektor odzadu, tj od end() do begin(). Vyřešilo to použít na to reverse. Tak jestli to nejsou problémy s knihovnama, tak je asi možný že to dělá něco v tom icm projektu.
Tenhle úkol je opravdu na infarkt, s žádným projektem jsem zatím neměl problémy s přeložením a tady jsem se za celý tři dny nedostal ani k blbýmu .icmout abych si to zkontroloval. :evil:
Uživatelský avatar
Armi
Matfyz(ák|ačka) level I
Příspěvky: 8
Registrován: 17. 1. 2008 12:00
Typ studia: Informatika Mgr.

Re: ICM divne chovani

Příspěvek od Armi »

Skus spustit v ICM s tymi testovacimi prikladmi. ICM spadne ked je chyba vo vstupe, debugovat sa to neda, najlepsie je vygenerovat assemlerovy kod a z malych testovacich prikladoch zistit co je veci. Mne inak ICM nefunguje ani na du5test2, vrati mi Requested bad value type on IP=27.
faymon

Re: ICM divne chovani

Příspěvek od faymon »

Armi píše:Skus spustit v ICM s tymi testovacimi prikladmi.
Pustil jsem to na jejich .mo a obdržel jsem "302820ahoj lidi13". Zajímavé. Jak vyrobím vlastní .mo, tak jsem tam kde jsem byl, assertion failed.
Tak možná.. oni na ten zásobník už něco dali? Číst se to .mo moc nedá, ale ten jejich soubor je větší než ten můj. Já tam nic nedal, to bych možná měl, ale zase se mi nezdá že by se to nedokázalo vypořádat s prázdným zásobníkem.
Co se vlastně bude kontrolovat, našel jsem v poznámkách že nějaké soubory .icmout, ty seženu kde? Kdyby teda čistě hypoteticky icm začalo pracovat.
Schiroo
Matfyz(ák|ačka) level I
Příspěvky: 28
Registrován: 1. 2. 2006 13:54
Typ studia: Informatika Bc.
Bydliště: Praha

Re: ICM divne chovani

Příspěvek od Schiroo »

Kontrolovat se budou předpokládám vygenerované instrukce a výstup programu. Doufám, že u instrukcí nebudou lpět na tom, aby byly přesně totožné, jako ty jejich, ale stačí aby byly funkčně ekvivalentní (prohození operandů při násobení apod.). Vzorové soubory .icmout jsou u testovacích dat.
May the source be with you!
blabla
Matfyz(ák|ačka) level II
Příspěvky: 70
Registrován: 27. 1. 2010 23:14
Typ studia: Informatika Mgr.

Re: ICM divne chovani

Příspěvek od blabla »

Schiroo píše:Kontrolovat se budou předpokládám vygenerované instrukce a výstup programu. Doufám, že u instrukcí nebudou lpět na tom, aby byly přesně totožné, jako ty jejich, ale stačí aby byly funkčně ekvivalentní (prohození operandů při násobení apod.). Vzorové soubory .icmout jsou u testovacích dat.
ked sa pozries do tych vysledkov autotestov tak tam vsade mas:
Compiler output diffs

Canonical dump diffs

Run output diffs

cize to po poradi myslim znamena ze sa kontroloju .out, .stcd a .icmout. .moa ich tym padom vobec nezaujima ak dobre chapem, riesilo sa to aj tu na fore minuly rok
Odpovědět

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