Re: Ispis stringova
Ima jedno elegantnije resenje.
Ne moraju se u bytecode-u pojaviti samo funkcije koje se nalaze u
izvornom kodu vec se mogu dodati i one koje imamo u nasoj "maloj
biblioteci".
Tako se print(var) gde je var tipa string moze prevesti kao poziv
nasoj maloj funkciji koju cemo nazvati recimo print_string i koju
ukljucujemo u kod samo ako nam treba. Slicno kao kad kompajliramo
staticki C program.
Adresa koja se koristi za call se moze odrediti na isti nacin kao kod
skokova, odnosno ulancavanjem. Bitno je da se na samom kraju main
funkcije odnosno iza END doda akcija koja ce ubaciti potrebne funkcije
u kod i izvrsiti patch-ovanje adresa call instrukcija. Same funkcije
iz "male biblioteke" se vec mogu nalaziti u prevedenom obliku odnosno
kao niz bajtova.
Pozdrav,
Igor
On 6/1/06, Jovan Popovic <jovan@etf.bg.ac.yu> wrote:
Ne moraju se u bytecode-u pojaviti samo funkcije koje se nalaze u
izvornom kodu vec se mogu dodati i one koje imamo u nasoj "maloj
biblioteci".
Tako se print(var) gde je var tipa string moze prevesti kao poziv
nasoj maloj funkciji koju cemo nazvati recimo print_string i koju
ukljucujemo u kod samo ako nam treba. Slicno kao kad kompajliramo
staticki C program.
Adresa koja se koristi za call se moze odrediti na isti nacin kao kod
skokova, odnosno ulancavanjem. Bitno je da se na samom kraju main
funkcije odnosno iza END doda akcija koja ce ubaciti potrebne funkcije
u kod i izvrsiti patch-ovanje adresa call instrukcija. Same funkcije
iz "male biblioteke" se vec mogu nalaziti u prevedenom obliku odnosno
kao niz bajtova.
Pozdrav,
Igor
On 6/1/06, Jovan Popovic <jovan@etf.bg.ac.yu> wrote:
Mozete da tako uradite.
Pozdrav,
Jovan
>
> Da bi se na ovaj nacin realizovao ispis stringova (koristeci asm
> instrukciju
> arraylenght), morali bi asemblerski da napravimo FOR petlju koja bi
> ispisala
> pojedinacne karaktere iz stringa.
> Ovo je izvodljivo, ali je problem koju globalnu promenljivu da koristimo
> kao indeks u toj FOR petlji...
> Da li mozemo da ubacimo u tabelu simbola dodatnu globalnu promenljivu tipa
> int na fiksnoj adresi, npr. 0, pa da onda mozemo da napravimo petlju
> koristeci nju kao indeks?
>
> Pozdrav,
> Nikola
>
>> String definisite kao char[] tako da mozete da nadjete duzinu niza preko
>> instrukcije arraylen. Stringovi moraju biti nizovi zato sto im se
>> vrednosti nalaze na heap-u.
>>
>> Pozdrav,
>> Jovan
>
>
>>> Da li moze pomoc oko toga kako da ispisujemo stringove? Hteo sam da
>>> napravim
>>> petlju koja ce da radi nesto slicno sledecem:
>>>
>>> for(int i=0; i<duz; i++){
>>>
>>> Code.put(Util.item_factory_instance.CreateConstantItem(string_var.charAt(i)));
>>> Code.put(print);
>>> }
>>>
>>> Problem je kako da znamo duzinu stringa ("string" tip sam realizovao
>>> kao
>>> obican tip, a ne array)?
>>> U smeni:
>>> <instr>-> print '(' <designator> ')' ';'
>>>
>>> <designator> se kreira kao Item kopiranjem objekta Obj iz simbol tabele
>>> a
>>> tamo ne postoji informacija o duzini stringa.
>>>
>>> Pozdrav,
>>> Nikola
>
>
>
> -----------------------------------------------------------------
> unsubscribe:
> minimalist@rti.etf.bg.ac.yu?subject=unsubscribe%20ri4pp
> -----------------------------------------------------------------
>
-----------------------------------------------------------------
unsubscribe:
minimalist@rti.etf.bg.ac.yu?subject=unsubscribe%20ri4pp
-----------------------------------------------------------------
- References:
- Skokovi
- From: "Nikola Kartelija" <kartel@ptt.yu>
- Re: Skokovi
- From: "Jovan Popovic" <jovan@etf.bg.ac.yu>
- Ispis stringova
- From: "Nikola Jelisavac" <jelenik@sbb.co.yu>
- Re: Ispis stringova
- From: "Jovan Popovic" <jovan@etf.bg.ac.yu>
- Re: Ispis stringova
- From: "Nikola Jelisavac" <jelenik@sbb.co.yu>
- Re: Ispis stringova
- From: "Jovan Popovic" <jovan@etf.bg.ac.yu>
- Skokovi
Previous by date: Break naredba
Next by date: Re: Nasledjivanje klasa
Previous by thread: Re: Nasledjivanje klasa Next by thread: Do while... da li je iko uspeo?
Previous by thread: Re: Nasledjivanje klasa Next by thread: Do while... da li je iko uspeo?