Related articles |
---|
Error reporting/recovery bourguet@my-deja.com (Jean-Marc Bourguet) (2000-04-05) |
Re: Error reporting/recovery iank@bearcave.com (2000-04-11) |
Re: Error reporting/recovery grosch@cocolab.de (2000-04-11) |
Re: Error reporting/recovery bourguet@my-deja.com (Jean-Marc Bourguet) (2000-04-14) |
Re: Error reporting/recovery bourguet@my-deja.com (Jean-Marc Bourguet) (2000-04-14) |
Re: Error reporting/recovery rod.bates@wichita.boeing.com (Rodney M. Bates) (2000-04-14) |
Re: Error reporting/recovery nr@labrador.eecs.harvard.edu (2000-04-16) |
Re: Error reporting/recovery j.coulmance@itecor-software.com (Jocelyn Coulmance) (2000-04-20) |
Re: Error reporting/recovery pnyq@my-deja.com (2000-05-08) |
From: | Jean-Marc Bourguet <bourguet@my-deja.com> |
Newsgroups: | comp.compilers |
Date: | 14 Apr 2000 01:01:49 -0400 |
Organization: | Deja.com - Before you buy. |
References: | 00-04-053 00-04-074 |
Keywords: | parse, errors |
grosch@cocolab.de (Josef Grosch) wrote:
> Jean-Marc Bourguet <bourguet@my-deja.com> asked about error
> reporting/recovery provided by parser generators:
>
> > - if there was other parser generators freely available
> > who did a better jobs,
>
> The parser generators Lark (LALR(2)) and Ell (LL(1)) of the Cocktail
> Toolbox provide automatic error reporting, recovery and repair.
> There is no need to add extra grammar rules using an error token.
> Everything is generated automatically. Example:
>
> if (a = b] write (a);
>
> The above source line would result in the following message:
>
> 3, 13: Error found/expected : ]/) = + - <> <= >= < > IN OR ...
That is indeed a better job than yacc (but that's not difficult). I
was searching for something better than just giving the valid tokens
which is something I'd call the mimimum acceptable as error reporting.
I remember having read a something in which a parser generator was
described which generated parser able to write this kind of messages
for some recursive rules but I've lost the reference. (It was a kind
of LR parser).
if (x = (a + b] then write (a);
^^^^^^^
Missing ")" for closing structure, replacing ']' by ')'
^^^^^^^^^^^^
Missing ")" for closing structure, inserting ')'
> Error recovery also happens automatically. A minimal sequence of
> tokens is skipped so that parsing can safely continue. Moreover
> a minimal sequence of tokens is inserted (virtually) in order to
> repair the error. This has the advantage that the output of the parser
> is always consistent in the sense that it belongs to a syntactically
> correct input. Therefore phases following after parsing do not have to
> take care about syntax errors.
I wonder how you can insert tokens for which the lexeme have an
importance (say an identifier) without these phase having to take care
about the fact that a token has been inserted and without generating
spurious messages (like "identifier not defined").
-- Jean-Marc
Return to the
comp.compilers page.
Search the
comp.compilers archives again.