[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Elision, or: Nick rides again in jbonai



   From: dmb@bigd.cray.com
   Date: Tue, 16 Apr 91 09:19:20 -0500

      I've considered the use of the <error> production to be a kludge ever
   since Jim Brown started it almost ten years ago.  It does allow the parser
   to recover from an elided terminator, if you are using YACC.  Of course,
   other errors in that position may get mistaken for elided terminators, though
   I'm not sure I could throw together an example that would get an error only
   at the place of an elided terminator.  It might be fun to try.

      My real question is for Guy.  If one wished to explore the question of
   including elidible terminators in the grammar, how would one go about it?
   My approach has been to include a rule allowing the terminator to go to an
   empty production and then examine the places where conflicts arise.  Those
   places are where ambiguities may arise if a terminator is elided.  Beyond
   that things seem to get messy.  

That's the first thing I would do, too.  And things can indeed get messy.

				   We don't have tools for hacking on grammars
   that make sure the language being defined doesn't change.

I'd have to check to be sure, but determining whether two context-free
grammars generate the same language is probably undecidable in the general
case.  That's not to say that you couldn't have a useful tool that prevents
you from making mistakes as you transform a grammar (but might not let
you make all possible transformations).
							      Grammar writing
   seems to be an art rather than a science.  My compiler theory classes were
   almost twenty years ago, but I do read some of the relevant journals.  The
   emphasis seems to be on developing better error recovery techniques and on
   modifications to the basic LR(k) algorithms which will produce smaller
   parsers.  I haven't seen any work on developing tools for grammar writers.