Blame examples/manual/eof_rules.lex

Packit f00812
/*
Packit f00812
 * eof_rules.lex : An example of using multiple buffers
Packit f00812
 *                 EOF rules, and start states
Packit f00812
 */
Packit f00812
Packit f00812
%{
Packit f00812
                              
Packit f00812
#define MAX_NEST 10                   
Packit f00812
Packit f00812
YY_BUFFER_STATE include_stack[MAX_NEST];
Packit f00812
int             include_count = -1;
Packit f00812
Packit f00812
%}
Packit f00812
Packit f00812
Packit f00812
%x INCLUDE
Packit f00812
Packit f00812
%%
Packit f00812
Packit f00812
^"#include"[ \t]*\"  BEGIN(INCLUDE);
Packit f00812
<INCLUDE>\"          BEGIN(INITIAL); 
Packit f00812
<INCLUDE>[^\"]+ {      /* get the include file name */
Packit f00812
          if ( include_count >= MAX_NEST){
Packit f00812
             fprintf( stderr, "Too many include files" );
Packit f00812
             exit( 1 );
Packit f00812
          }
Packit f00812
Packit f00812
          include_stack[++include_count] = YY_CURRENT_BUFFER;
Packit f00812
Packit f00812
          yyin = fopen( yytext, "r" );
Packit f00812
          if ( ! yyin ){
Packit f00812
             fprintf( stderr, "Unable to open \"%s\"\n",yytext);
Packit f00812
             exit( 1 );
Packit f00812
          }
Packit f00812
Packit f00812
          yy_switch_to_buffer(yy_create_buffer(yyin,YY_BUF_SIZE));
Packit f00812
Packit f00812
          BEGIN(INITIAL);
Packit f00812
        }
Packit f00812
<INCLUDE><<EOF>> 
Packit f00812
        {
Packit f00812
            fprintf( stderr, "EOF in include" );
Packit f00812
            yyterminate();
Packit f00812
        }
Packit f00812
<<EOF>> {
Packit f00812
          if ( include_count <= 0 ){
Packit f00812
            yyterminate();
Packit f00812
          } else {
Packit f00812
            yy_delete_buffer(include_stack[include_count--] );
Packit f00812
            yy_switch_to_buffer(include_stack[include_count] );
Packit f00812
            BEGIN(INCLUDE);
Packit f00812
          }
Packit f00812
        }
Packit f00812
[a-z]+               ECHO;
Packit f00812
.|\n                 ECHO;
Packit f00812
Packit f00812
Packit f00812
Packit f00812
Packit f00812
Packit f00812
Packit f00812
Packit f00812
Packit f00812
Packit f00812