Re: Domaci >> Semantika >> createItem problemi
Ako nadjete neku razliku posaljite mi mail. U ovom slucaju problem je u
kodu - postavicu ispravljenu verziju. Kod koji ste dobili mozete da
menjate to se u principu odnosi i na konstante koje opisuju "kind"
simbola. Jedino sto ne smete da menjate su konstante za vrstu Item*a posto
generator * klasa Code trazi vas te vrednosti da bi generisala kod u
metodama load i store.
Sto se tice vrednosti Item.Con i Item.Meth:
Item.Con se koristi u metodi code.put(Item) i Code.load(Item) u kojima se
na osnovu Item.Con opdlucuje koju mj instrukciju trebagenerisati.
Item.Meth se koristi u semantickoj analizi da bi se precilo:
f(3) = 5;
U ovom slucaju levi Item ima vrstu Item.Meth i na osnovu toga se moze
utvrditi da se levoj stranui ne moze dodeliti vrednost. Umesto ovog se
moze koristiti i Item.Stack za vracenu vrednost funkcije posto su provere
u semantickoj analizi iste. Sami odlucite da li koirstite Item.Stack ili
Item.Meth za ovo ne bi trebalo da bude razlike.
Item konstanta postoji za definisane konstante oblika
const int pi = 3;
Dodacu je u skriptu.
Pozdrav,
Jovan
> U skripti za semanticku analizu pise:
>
> algoritam CreateItem
>
> ulaz : Simbol iz tabele simbola
>
> izlaz : Item koji sadrži informacije o simbolu
>
> 1.Kreira se novi Item i u njega se prepisuju adresa, ime i tip
> simbola.
>
> 2. Postavlja se vrsta simbola (polje *kind)*.
>
> Ako je vrsta simbola:
>
> 2.1. Globalna promenljiva : vrsta Item-a je Static
>
> 2.2. Lokalna promenljiva ili parametar : vrsta
> Item-a je Local
>
> 2.3. Polje u klasi : vrsta Item-a je Field
>
> 2.4. Element niza : vrsta Item-a je Elem
>
> 2.5. Funkcija ili konstanta: vrsta Item-a je Stack
>
> 3. Vraća se referenca na kreirani Item
>
> dok u SemanticAnalyzer.ItemFactory stoji:
>
> public Item CreateItem(Obj o)
>> {
>> Item item = new Item();
>> item.name = o.name ;
>> if(o instanceof Variable)
>> {
>> //Set the type and address for
>> Variable var = (Variable)o;
>> item.type = var.type;
>> item.adr = var.adr;
>> }
>> //Set a item kind
>> if (o.isA(ObjFactory.CONSTANT))
>> item.kind = Item.Con;
>> else if (o.isA(ObjFactory.STATIC))
>> item.kind = Item.Static;
>> else if (o.isA(ObjFactory.STATIC ))
>> item.kind = Item.Local;
>> else if (o.isA(ObjFactory.FIELD))
>> {
>> item.kind = Item.Fld;
>> }
>> else if (o instanceof Function)
>> {
>> item.kind = Item.Meth ;
>> item.obj = o;
>> }
>> return item;
>> }
>>
>
>
>
> dakle razlike su:
>
> 1. u kodu funkcija prelazi u metod (umesto u "stek"),
> 2. Item.konstanta uopste ne postoji u skripti, kao ni Item.Method ali
> se koristi u kodu
> 3. u datom kodu ne postoji uopste podrska za parametre a za ulaz
> Obj.LOCAL nema obrade ----- ovo je najmanji problem, vidi se izdaleka
> ali ajd i to da spomenem...
>
> Ono sto mene pre svega interesuje je: da li da se u ovakvim i slicnim
> situacijama slobodno 100% oslonimo na skriptu a da po potrebi (kada hocemo
> da prosirujemo klase zbog rada sa objektima i slicnim neobradjenim
> stvarima)
> nadogradjujemo te nase objekte, a da uopste ne gledamo na dat izvorni kod,
> vec da sami radimo nadogradnju? Sta je 100% tacno, skripta/primeri/neka
> dokumentacija?
>
> p.s. znam da bih znao odgovor na moje pitanje da sam procitao sve skripte
> do
> kraja ali mislim da je ovo jedan od najbitnijih delova analizatora pa
> mislim
> da bi bilo dobro da razjasnimo ovu funkciju do kraja...
>
> postovanje & pozdrav
>
> Milan Aleksic
>
kodu - postavicu ispravljenu verziju. Kod koji ste dobili mozete da
menjate to se u principu odnosi i na konstante koje opisuju "kind"
simbola. Jedino sto ne smete da menjate su konstante za vrstu Item*a posto
generator * klasa Code trazi vas te vrednosti da bi generisala kod u
metodama load i store.
Sto se tice vrednosti Item.Con i Item.Meth:
Item.Con se koristi u metodi code.put(Item) i Code.load(Item) u kojima se
na osnovu Item.Con opdlucuje koju mj instrukciju trebagenerisati.
Item.Meth se koristi u semantickoj analizi da bi se precilo:
f(3) = 5;
U ovom slucaju levi Item ima vrstu Item.Meth i na osnovu toga se moze
utvrditi da se levoj stranui ne moze dodeliti vrednost. Umesto ovog se
moze koristiti i Item.Stack za vracenu vrednost funkcije posto su provere
u semantickoj analizi iste. Sami odlucite da li koirstite Item.Stack ili
Item.Meth za ovo ne bi trebalo da bude razlike.
Item konstanta postoji za definisane konstante oblika
const int pi = 3;
Dodacu je u skriptu.
Pozdrav,
Jovan
> U skripti za semanticku analizu pise:
>
> algoritam CreateItem
>
> ulaz : Simbol iz tabele simbola
>
> izlaz : Item koji sadrži informacije o simbolu
>
> 1.Kreira se novi Item i u njega se prepisuju adresa, ime i tip
> simbola.
>
> 2. Postavlja se vrsta simbola (polje *kind)*.
>
> Ako je vrsta simbola:
>
> 2.1. Globalna promenljiva : vrsta Item-a je Static
>
> 2.2. Lokalna promenljiva ili parametar : vrsta
> Item-a je Local
>
> 2.3. Polje u klasi : vrsta Item-a je Field
>
> 2.4. Element niza : vrsta Item-a je Elem
>
> 2.5. Funkcija ili konstanta: vrsta Item-a je Stack
>
> 3. Vraća se referenca na kreirani Item
>
> dok u SemanticAnalyzer.ItemFactory stoji:
>
> public Item CreateItem(Obj o)
>> {
>> Item item = new Item();
>> item.name = o.name ;
>> if(o instanceof Variable)
>> {
>> //Set the type and address for
>> Variable var = (Variable)o;
>> item.type = var.type;
>> item.adr = var.adr;
>> }
>> //Set a item kind
>> if (o.isA(ObjFactory.CONSTANT))
>> item.kind = Item.Con;
>> else if (o.isA(ObjFactory.STATIC))
>> item.kind = Item.Static;
>> else if (o.isA(ObjFactory.STATIC ))
>> item.kind = Item.Local;
>> else if (o.isA(ObjFactory.FIELD))
>> {
>> item.kind = Item.Fld;
>> }
>> else if (o instanceof Function)
>> {
>> item.kind = Item.Meth ;
>> item.obj = o;
>> }
>> return item;
>> }
>>
>
>
>
> dakle razlike su:
>
> 1. u kodu funkcija prelazi u metod (umesto u "stek"),
> 2. Item.konstanta uopste ne postoji u skripti, kao ni Item.Method ali
> se koristi u kodu
> 3. u datom kodu ne postoji uopste podrska za parametre a za ulaz
> Obj.LOCAL nema obrade ----- ovo je najmanji problem, vidi se izdaleka
> ali ajd i to da spomenem...
>
> Ono sto mene pre svega interesuje je: da li da se u ovakvim i slicnim
> situacijama slobodno 100% oslonimo na skriptu a da po potrebi (kada hocemo
> da prosirujemo klase zbog rada sa objektima i slicnim neobradjenim
> stvarima)
> nadogradjujemo te nase objekte, a da uopste ne gledamo na dat izvorni kod,
> vec da sami radimo nadogradnju? Sta je 100% tacno, skripta/primeri/neka
> dokumentacija?
>
> p.s. znam da bih znao odgovor na moje pitanje da sam procitao sve skripte
> do
> kraja ali mislim da je ovo jedan od najbitnijih delova analizatora pa
> mislim
> da bi bilo dobro da razjasnimo ovu funkciju do kraja...
>
> postovanje & pozdrav
>
> Milan Aleksic
>
- Follow-Ups:
- Re: Domaci >> Semantika >> createItem problemi
- From: "Milan Aleksic" <milanaleksic@gmail.com>
- Re: Domaci >> Semantika >> createItem problemi
- References:
- Domaci >> Semantika >> createItem problemi
- From: "Milan Aleksic" <milanaleksic@gmail.com>
- Domaci >> Semantika >> createItem problemi
Previous by date: Domaci >> Semantika >> createItem problemi
Next by date: Novi primeri koda
Previous by thread: Domaci >> Semantika >> createItem problemi Next by thread: Re: Domaci >> Semantika >> createItem problemi
Previous by thread: Domaci >> Semantika >> createItem problemi Next by thread: Re: Domaci >> Semantika >> createItem problemi