[Top][All Lists]

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

Re: yyrestart

From: Paul Eggert
Subject: Re: yyrestart
Date: 12 May 2003 12:38:27 -0700
User-agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3

> From: Akim Demaille <address@hidden>
> Date: Sat, 29 Mar 2003 14:29:18 +0100

>       * doc/bison.texinfo (How Can I Reset @code{yyparse}): New.

Thanks.  I installed the following minor English and technical fixups to that.

2003-05-12  Paul Eggert  <address@hidden>

        * doc/bison.texinfo (How Can I Reset @code{yyparse}): Reword the
        English a bit.  Fix fclose typo.  Change "const char" to "char
        const", and use ANSI C rather than K&R for "main".  Suggest
        YY_FLUSH_BUFFER over yyrestart (as that is what Flex recommends)
        and suggest yy_switch_to_buffer.

--- bison.texinfo.~1.107.~      Tue Apr 29 11:52:00 2003
+++ bison.texinfo       Mon May 12 12:27:05 2003
@@ -6376,26 +6376,26 @@ This question is already addressed elsew
 @node How Can I Reset @code{yyparse}
 @section How Can I Reset @code{yyparse}
-The following phenomenon gives raise to several incarnations,
-resulting in the following typical questions:
+The following phenomenon has several symptoms, resulting in the
+following typical questions:
 I invoke @code{yyparse} several times, and on correct input it works
 properly; but when a parse error is found, all the other calls fail
-too.  How can I reset @code{yyparse}'s error flag?
+too.  How can I reset the error flag of @code{yyparse}?
 @end display
-My parser includes support for a @samp{#include} like feature, in
+My parser includes support for an @samp{#include}-like feature, in
 which case I run @code{yyparse} from @code{yyparse}.  This fails
 although I did specify I needed a @code{%pure-parser}.
 @end display
-These problems are not related to Bison itself, but with the Lex
-generated scanners.  Because these scanners use large buffers for
+These problems typically come not from Bison itself, but from
+Lex-generated scanners.  Because these scanners use large buffers for
 speed, they might not notice a change of input file.  As a
 demonstration, consider the following source file,
@@ -6409,20 +6409,20 @@ demonstration, consider the following so
 .*\n    ECHO; return 1;
-yyparse (const char *file)
+yyparse (char const *file)
   yyin = fopen (file, "r");
   if (!yyin)
     exit (2);
   /* One token only. */
   yylex ();
-  if (!fclose (yyin))
+  if (fclose (yyin) != 0)
     exit (3);
   return 0;
-main ()
+main (void)
   yyparse ("input");
   yyparse ("input");
@@ -6439,7 +6439,7 @@ input:2: World!
 @end verbatim
-then instead of getting twice the first line, you get:
+then instead of getting the first line twice, you get:
 $ @kbd{flex -ofirst-line.c first-line.l}
@@ -6449,12 +6449,15 @@ input:1: Hello,
 input:2: World!
 @end example
-Therefore, whenever you change @code{yyin}, you must tell the Lex
-generated scanner to discard its current buffer, and to switch to the
-new one.  This depends upon your implementation of Lex, see its
-documentation for more.  For instance, in the case of Flex, a simple
-call @samp{yyrestart (yyin)} suffices after each change to
+Therefore, whenever you change @code{yyin}, you must tell the
+Lex-generated scanner to discard its current buffer and switch to the
+new one.  This depends upon your implementation of Lex; see its
+documentation for more.  For Flex, it suffices to call
address@hidden after each change to @code{yyin}.  If your
+Flex-generated scanner needs to read from several input streams to
+handle features like include files, you might consider using Flex
+functions like @samp{yy_switch_to_buffer} that manipulate multiple
+input buffers.
 @node Strings are Destroyed
 @section Strings are Destroyed

reply via email to

[Prev in Thread] Current Thread [Next in Thread]