[vox-tech] how to get yacc/bison to say "i'm confused"

Peter Jay Salzman vox-tech@lists.lugod.org
Thu, 27 Dec 2001 12:58:53 -0800


begin Takashi Ishihara <tishihara@ucdavis.edu> 
> > i have a rule like:
> > 
> > 	(snip)
> > 	WORD    { ParseError($1); }
> > 	;
> 
> then WORD is now a part of the grammer, which you don't want.

actually, it didn't hurt because my grammar is pretty strict.  input is
either (very loosely, this *isn't* bison code):

statement: keywords
	| anything

keywords: keyword
	| keywords keyword

anything: letter TOKEN letter
	| WORD TOKEN WORD

so if input were just WORD, it doesn't hurt anything, and it does catch
really stupid things like "alsdjasdfalsdf".

but you're absolutely right, that's not even a close approximation of
how i should be handling errors.  it just took me a few hours to figure
that out.   :)

> Try:
> 0. make sure the grammer is correct, and get rid of shift/reduce
>    or red/red conflicts (by adding pref, etc).

done.  i think using states would help me here, but i still need to read
about them.  frankly, the program is so close to being done, i'd rather
not start implementing new features that are just bound to confuse me.
i'd rather travel a mile downward taking small steps rather than jumping
off a cliff.  :)

> 1. use yyerror()

took me a few hours to figure this out, but done.  :)

> 2. build a parse tree first (just parse, no evaluation).
>    After the completion of the build, evaluate it. 
> 
> If you have a time, read the dragon book by aho.
 
i think i'd rather jump off that cliff.  ;)    seriously, this book
won't help me here.  i'm out to write a program, not master the topic of
abstract grammar.   it would be like reading the derivation of the
cardan formula when all i really want to do is solve a cubic equation.
sure i'd master alot of really good theory, but it's not clear that i'd
know how to "get the answer".

pete


-- 
PGP Fingerprint: B9F1 6CF3 47C4 7CD8 D33E  70A9 A3B9 1945 67EA 951D
PGP Public Key:  finger p@dirac.org