title: Flex input buffer reset after error
body: <p>I'm using flex &amp; bison to parse a custom language and I'm in the situation described here: <a href="http://www.gnu.org/software/bison/manual/html_node/How-Can-I-Reset-the-Parser.html" rel="nofollow">http://www.gnu.org/software/bison/manual/html_node/How-Can-I-Reset-the-Parser.html</a>.
  To be more precise</p>
  
  <blockquote>
    <p>I invoke 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 the error flag of yyparse?</p>
  </blockquote>
  
  <p>My parser and scanner run inside a separate thread, but there is only one thread working with the input file. In my understanding I don't need to write a reentrant scanner since there is only one thread working with the input file. In that page the problem is clearly explained but the solution is not clear to me.
  It says:</p>
  
  <blockquote>
    <p>Therefore, whenever you change 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 ‘YY_FLUSH_BUFFER’ after each
    change to 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 ‘yy_switch_to_buffer’ that
    manipulate multiple input buffers</p>
  </blockquote>
  
  <p>My parser thread calls yyparse in order to build my AST. What is not clear to me is when and where I have to call yy_flush_buffer to fix the problem. In my understanding the scanner code (generated by Flex) is called by the parser code (generated by Bison). The Bison generated code is generated by the grammar. As a result the parser code is not under my direct control. This means I cannot include the call to yy_flush_buffer into the parser code since it would be overwritten every time I generate the parser code by the grammar. It means that I should put the yy_flush_buffer in the grammr file somewhere. But where?</p>