«« ( Date ) »» // «« ( Thread ) »» // ri4pp - 2005

Re: Par Pitanja DZ3

by lilit78yu
sreda, 04. maj 2005 - 13:22.

Pazi! nVars predstavlja ukupan broj parametara, a level treba da predstavlja broj formalnih parametara !
Klasa Scope ima i atribut nVars (broj polja u tom opsegu), koji metoda
Tab.insert inkrementira kada uspesno ubaci novi objekat!
Iskoristi to.
>Pri deklaraciji metoda moze se desiti da se pojavi ponovljena
deklaracija.
int error(int x, char c, char c){...}

Nisam bas siguran da je gornja situacija korektna. Kako sada ta tvoja
f-ja da
razlikuje koju od promenljivih u ovom slucaju C adresiras? Ja mislim da
je
potrebno da se u definiciji f-je pojave sve razlicite promenljive, a tek
pri
pozivu one mogu biti iste tj. ako bi se gornja f-ja pozvala sa int i =
error
(x,c,c) sve bi trebalo da funkcionise.

Naravno, ovo jeste nekorektna deklaracija, medjutim, nije problem u tome
da
li je ovo ispravno ili ne ! Problem je u tome sto pri pokusaju da se ubaci
CHAR C drugi put u TOPSCOPE.locals, metoda TAB.INSERT vraca upravo onaj
prvi
CHAR C, koji je vec u TOPSCOPE.locals . Na osnovu ovoga, ne moze da se
'provali' da li je drugi CHAR C uspesno ili ne ubacen u TS.locals .
Pogledaj
ovo :
public static Obj insert (int kind, String name, Struct type) {
// check for duplicate
for (Obj p = topScope.locals; p != null; p = p.next)
if (p.name.equals(name)) {
error(name + " already declared");
return p;
}
....
Dakle, pokusavas da u TS.locals drugi put ubacis CHAR C. Posto se ovaj Obj
vec nalazi u TS.locals, TAB.INSERT vraca pronadjeni Obj CHAR C ( prvi ) i
kada u parseru pokusas da ih uporedis ( da bi znao da li je uspesno
ubacen,
obzirom da tekstualna poruka o gresci za parser ne znaci nista ), sa
recimo,
Obj1.equals(Tab.insert(Obj1.kind,Obj1.name,Obj1.type) --> dobijes
jednakost
iako operacija nije uspela. ( Ako je operacija uspesna vraca se ubaceni
Obj
)---> Dakle u oba slucaja se dobije jednakost....
Da li mesto (return p) u Tab.insert staviti (return noObj) i tako
promeniti
clasu Tab?... To je bilo pitanje.