1*357f1050SThomas Veerman /* 2*357f1050SThomas Veerman * eof_rules.lex : An example of using multiple buffers 3*357f1050SThomas Veerman * EOF rules, and start states 4*357f1050SThomas Veerman */ 5*357f1050SThomas Veerman 6*357f1050SThomas Veerman %{ 7*357f1050SThomas Veerman 8*357f1050SThomas Veerman #define MAX_NEST 10 9*357f1050SThomas Veerman 10*357f1050SThomas Veerman YY_BUFFER_STATE include_stack[MAX_NEST]; 11*357f1050SThomas Veerman int include_count = -1; 12*357f1050SThomas Veerman 13*357f1050SThomas Veerman %} 14*357f1050SThomas Veerman 15*357f1050SThomas Veerman 16*357f1050SThomas Veerman %x INCLUDE 17*357f1050SThomas Veerman 18*357f1050SThomas Veerman %% 19*357f1050SThomas Veerman 20*357f1050SThomas Veerman ^"#include"[ \t]*\" BEGIN(INCLUDE); 21*357f1050SThomas Veerman <INCLUDE>\" BEGIN(INITIAL); 22*357f1050SThomas Veerman <INCLUDE>[^\"]+ { /* get the include file name */ 23*357f1050SThomas Veerman if ( include_count >= MAX_NEST){ 24*357f1050SThomas Veerman fprintf( stderr, "Too many include files" ); 25*357f1050SThomas Veerman exit( 1 ); 26*357f1050SThomas Veerman } 27*357f1050SThomas Veerman 28*357f1050SThomas Veerman include_stack[++include_count] = YY_CURRENT_BUFFER; 29*357f1050SThomas Veerman 30*357f1050SThomas Veerman yyin = fopen( yytext, "r" ); 31*357f1050SThomas Veerman if ( ! yyin ){ 32*357f1050SThomas Veerman fprintf( stderr, "Unable to open \"%s\"\n",yytext); 33*357f1050SThomas Veerman exit( 1 ); 34*357f1050SThomas Veerman } 35*357f1050SThomas Veerman 36*357f1050SThomas Veerman yy_switch_to_buffer(yy_create_buffer(yyin,YY_BUF_SIZE)); 37*357f1050SThomas Veerman 38*357f1050SThomas Veerman BEGIN(INITIAL); 39*357f1050SThomas Veerman } 40*357f1050SThomas Veerman <INCLUDE><<EOF>> 41*357f1050SThomas Veerman { 42*357f1050SThomas Veerman fprintf( stderr, "EOF in include" ); 43*357f1050SThomas Veerman yyterminate(); 44*357f1050SThomas Veerman } 45*357f1050SThomas Veerman <<EOF>> { 46*357f1050SThomas Veerman if ( include_count <= 0 ){ 47*357f1050SThomas Veerman yyterminate(); 48*357f1050SThomas Veerman } else { 49*357f1050SThomas Veerman yy_delete_buffer(include_stack[include_count--] ); 50*357f1050SThomas Veerman yy_switch_to_buffer(include_stack[include_count] ); 51*357f1050SThomas Veerman BEGIN(INCLUDE); 52*357f1050SThomas Veerman } 53*357f1050SThomas Veerman } 54*357f1050SThomas Veerman [a-z]+ ECHO; 55*357f1050SThomas Veerman .|\n ECHO; 56*357f1050SThomas Veerman 57*357f1050SThomas Veerman 58*357f1050SThomas Veerman 59*357f1050SThomas Veerman 60*357f1050SThomas Veerman 61*357f1050SThomas Veerman 62*357f1050SThomas Veerman 63*357f1050SThomas Veerman 64*357f1050SThomas Veerman 65*357f1050SThomas Veerman 66