error recovery with yacc

scheek@RUGRCX.RUG.NL (Frans van hoesel)
Tue, 10 Nov 1992 16:14:41 GMT

          From comp.compilers

Related articles
error recovery with yacc scheek@RUGRCX.RUG.NL (1992-11-10)
Re: error recovery with yacc danfuzz@wastelands.kaleida.com (1992-11-14)
| List of all articles for this month |

Newsgroups: comp.compilers
From: scheek@RUGRCX.RUG.NL (Frans van hoesel)
Organization: Compilers Central
Date: Tue, 10 Nov 1992 16:14:41 GMT
Keywords: yacc, errors

Hi


      I have a problem understanding/using the error recovery mechanisme
      with yacc. Part of my syntax is:


     %start compilation_chunk
%%


procedure:
: PROC proc_header proc_body ENDPROC
;
proc_body
: statement_list
;
statement_list
: /* empty */
| statement
| statement_list separator
| statement_list separator statement
;
seperator
: ';'
| NEWLINE
;
one_liner
: /* empty */
| statement
| one_liner ';'
| one_liner ';' statement
;
compilation_chunk
: one_liner NEWLINE
{ YYACCEPT ; }
| procedure
{ YYACCEPT ; }
;
       %%


      If some statement is in error then I just want to skip over the
      next separator (which is a ';' or NEWLINE) and continue the
      parsing of the proc_body with the rest of the statements.
      I added the following rule to the statement_list definition:
| error separator statement_list
      ( no yyerrok here!)
      This seems ok, but causes the error to be reduce only just before
      the ENDPROC.
      Somehow it just doesn't feel right to me. Is there a better way?


      It sounds to me I'm reinventing the wheel, so maybe there is a
      kind person who wants to explain to me how a wheel should look like?


-- frans van hoesel


scheek@rugrcx.rug.nl or
hoesel@igc.ethz.ch
(both are me)
--


Post a followup to this message

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