«« ( Date ) »» // «« ( Thread ) »» // ir4pp1 - 2006

pitanje!!

by ivan dan
petak, 24. novembar 2006 - 19:01.

Fja scan() u klasi parser:

public java_cup.runtime.Symbol scan() throws java.lang.Exception {
Symbol simbol=getScanner().next_token();
if (simbol!=null) {
while (simbol.sym==sym.INVALID) {
System.out.println("LEKSICKA GRESKA: "+simbol.value+" !!!");
simbol=getScanner().next_token();
}
return (simbol!=null) ? simbol: new Symbol (EOF_sym());
} else return new Symbol(EOF_sym());
}
Ako sam dobro razumeo, parser u metodi parse() poziva metodu scan()kada zeli da mu analizator da novi token.Metodu scan() redefinisemo da parseru ne bi slali INVALID tokene,nego da stampamo da je doslo do leksicke greske.Cini mi se da metoda nije najbolje redefinisana.Prvo pitanje je zasto smo se pitali da li je neki simbol null kada smo u MJlexer.lex fajlu stavili direktivu
%eofval{
return new Symbol(sym.EOF);
%eofval}.
To znaci da kada analizator stigne do kraja fajla, poslace token EOF, pa nigde simbol nije mogao da bude null. Ako je odgovor na pitanje da mi nismo morali da stavimo tu direktivu u lex fajl ,pa bi onda analizator mogao da vrati null opet mi se cini da postoji greska. Ako je stigao INVALID token, a posle toga je kraj fajla mi ulazimo u while petlju u kojoj prvo stampamo "Leksicka Greska" onda trazimo od analizatora sledeci token i on nam vraca null.U uslovu za while pitamo se da li je simbol.sym==sym.INVALID a posto je simbol null baca se runtime exception!! Ceo kod ispod bloka while onda nema smisla.
Da li je uopste new Symbol(EOF_sym())drugi nacin da se parseru kaze da je doslo do kraja fajla koji se parsira ako vec ne pravimo new Symbol(sym.EOF)??
Izvinjavam se ako sam pogresio!!!


---------------------------------
Access over 1 million songs - Yahoo! Music Unlimited.