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

Re: Par Pitanja DZ3

by lilit78yu
ponedeljak, 02. maj 2005 - 01:30.

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