Re: Oporavak od greske ...
Ako želim bilo kakvu pristojniju obradu grešaka, treba da zaboravim
na LR parsere i napišem ad hoc rekurzivni spust. Bar sam ja tako
zaključio. :-)
----- Original Message ----- From: "Dragan Bojic" <bojic@etf.bg.ac.yu>
To: <ri4pp@titan.etf.bg.ac.yu>
Sent: Sunday, January 16, 2005 1:47 AM
Subject: Re: [ri4pp] Oporavak od greske ...
Ako bas vas zanima kako se radi bolji oporavak - ovo je
cisto informativno za onoga koga zanima - postoje nacini
(bar sto se tice c-ovskog yacc-a) da se ide do sledeceg "sigurnog"
tokena na ulazu pa da se on "vrati" na ulaz, na primer, ako
zelimo da ne preskocimo znak } pri trazenju kraja statementa,
stavicemo nesto kao:
statement -> error "}" { yyerrok; yychar = "}"; }
yychar je promenljiva koja sadrzi sledeci token sa ulaza.
Njenu vrednost parser po potrebi (kada god mu treba ulazni simbol da
odluci koja je sledeca akcija) postavlja pozivom leks. analizatora
yylex().
Deo gornje linije izmedju { i } nalaze parseru da kada upari error
smenu (pri tome je vec progutao "}" na ulazu jer smena sadrzi
taj znak, ponovo se parseru podmetne "}" kao sledeci ulazni simbol.
TAko se moze dodati i niz smena za druge tokene koje ne zelimo
da preskocimo npr:
statement -> error "if"
i tome slicno.
Napomena:
Naravno ovo funkcionise u slucaju da parser pri prepoznavanju
smene statement -> error "}" nije vec procitao ulaz iza "}",
sto je gotovo sigurno u ovoj situaciji ispunjeno
- yacc-ovski parser ne cita ulaz ako
jednoznacno zna na osnovu steka sta da uradi). Ovo se proverava
u fajlu koji predstavlja stanja parsera a koji se moze dobiti
kod yacc-a opcijom -v. Evo kako se prepoznaje stanje kod koga se
za bilo koji ulaz (oznaka je .) preduzima ista akcija (dakle i
ne cita se tekuci ulaz):
-----------
state 12
term : '(' izraz ')' . (8)
. reduce 8
-----------
DB
- References:
- Oporavak od greske ...
- From: Basic Danijel <danijel@net.yu>
- Re: Oporavak od greske ...
- From: Dragan Marjanovic <marecare2@gmail.com>
- Re: Oporavak od greske ...
- From: Dragan Bojic <bojic@etf.bg.ac.yu>
- Re: Oporavak od greske ...
- From: Dragan Bojic <bojic@etf.bg.ac.yu>
- Oporavak od greske ...
Previous by date: Odbrana drugog domaceg...
Next by date: Stara Java u 70
Previous by thread: Re: Oporavak od greske ... Next by thread: Re[2]: Oporavak od greske ...
Previous by thread: Re: Oporavak od greske ... Next by thread: Re[2]: Oporavak od greske ...