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

Re: Kako izvuci intValue iz Symbol-a?

by lilit78yu
subota, 25. jun 2005 - 19:48.

... resenje je prilicno jednostavno, ali zahteva dosta promena :))
prvo u lexeru kada lexer naidje na broj on treba da vrati nesto slicno ovome:
return new Symbol(sym.NUMBER,new Integer(yytext()));
... dake, od yytext-a u konstruktoru on napravi Integer.
Sledeca stvar je da u parseru navedes da je tvoj terminal NUMBER tipa Integer:
terminal Integer NUMBER;
... nadalje je lako ... tvoja smena treba da bude:
NUMBER:Integer_Value
{:
RESULT = Integer_Value.intValue();
:}
... i tako dobijes int.
Sada compile lexer i parser i to je to :))
(IV domaci)
Negde u smenama imam:
NUMBER:broj {: RESULT= new Item((int)broj) :}
(skraceno)
Medjutim, ovo gore ne radi. Znam tacno i zbog cega: NUMBER je tipa
Symbol, koji izmedju ostalog ima i polje Object value; Taj value se
dodeljuje promenljivoj broj (Object broj). Iz te promenljive broj
pojma nemam kako da izvucem int?! Posto je primerak klase Object,
skoro da i nema svoje metode, a ne moze se izvrsiti konverzija u neki
drugi tip . Probao sam:
(int)broj - nece da se kompajlira("inconvertible types")
(Integer)broj -hoce, ali pukne u runtime-u (kaze:
"java.lang.ClassCastException: java.lang.String"... (?!?!?) )
((Integer)broj).intValue() - isto kao gore...

Kako resiti ovaj problem?
(resenje NIJE da se uzme toString() jer on stampa sym, tj. kodni broj
za integer)

--
Pozdrav!
Veljko mailto:veljkoz@gmail.com