Re: Error reporting/recovery

Jean-Marc Bourguet <>
14 Apr 2000 01:01:49 -0400

          From comp.compilers

Related articles
Error reporting/recovery (Jean-Marc Bourguet) (2000-04-05)
Re: Error reporting/recovery (2000-04-11)
Re: Error reporting/recovery (2000-04-11)
Re: Error reporting/recovery (Jean-Marc Bourguet) (2000-04-14)
Re: Error reporting/recovery (Jean-Marc Bourguet) (2000-04-14)
Re: Error reporting/recovery (Rodney M. Bates) (2000-04-14)
Re: Error reporting/recovery (2000-04-16)
Re: Error reporting/recovery (Jocelyn Coulmance) (2000-04-20)
Re: Error reporting/recovery (2000-05-08)
| List of all articles for this month |

From: Jean-Marc Bourguet <>
Newsgroups: comp.compilers
Date: 14 Apr 2000 01:01:49 -0400
Organization: - Before you buy.
References: 00-04-053 00-04-074
Keywords: parse, errors (Josef Grosch) wrote:
> Jean-Marc Bourguet <> 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

Post a followup to this message

Return to the comp.compilers page.
Search the comp.compilers archives again.