/* A lexical scanner generated by flex */ #define FLEX_FAST_SKEL #include "fastskeldef.h" %% section 1 code and the definition of YY_TRANS_OFFSET_TYPE, if needed, go here #ifndef FLEX_FULL_TABLE /* struct for yy_transition */ struct yy_trans_info { /* v is a verify for a transition. */ short v; /* In cases where its sister v *is* a "yes, there is a transition", * n is* the offset (in records) to the next state. In most cases * where there is no transition, the value of n is irrelevant. If n * is the -1th record of a state, though, then n is the action * number for that state */ YY_TRANS_OFFSET_TYPE n; }; #endif %% data tables for DFA go here /* these declarations have to come after the section 1 code or lint gets * confused about whether the variables are used */ FILE *yyin = stdin, *yyout = stdout; /* these variables are all declared out here so that section 3 code can * manipulate them */ static char *yy_c_buf_p; /* points to current character in buffer */ static char *yy_b_buf_p; /* points to start of current scan */ static int yy_init = 1; /* whether we need to initialize */ static int yy_start; /* start state number */ /* true when we've seen an EOF for the current input file */ static int yy_eof_has_been_seen; static int yy_n_chars; /* number of characters read into yy_ch_buf */ /* yy_ch_buf has to be 2 characters longer than YY_BUF_SIZE because we need * to put in 2 end-of-buffer characters (this is explained where it is * done) at the end of yy_ch_buf */ static char yy_ch_buf[YY_BUF_SIZE + 2]; /* yy_hold_char holds the character lost when yytext is formed */ static char yy_hold_char; char *yytext; static int yyleng; /* length of yytext */ static YY_CS_TYPE yy_last_accepting_state; static char *yy_last_accepting_cpos; static YY_CS_TYPE yy_get_previous_state(); static int yy_get_next_buffer(); #define FLEX_USES_BACKTRACKING #ifdef FLEX_USES_BACKTRACKING # ifdef FLEX_FULL_TABLE # define YY_BACKTRACKING_ACTION(cur_state,cur_buf_p) \ if ( l[cur_state] ) \ { \ yy_last_accepting_state = cur_state; \ yy_last_accepting_cpos = cur_buf_p; \ } # else # define YY_BACKTRACKING_ACTION(cur_state,cur_buf_p) \ if ( cur_state[-1].n ) \ { \ yy_last_accepting_state = cur_state; \ yy_last_accepting_cpos = cur_buf_p; \ } # endif #else # define YY_BACKTRACKING_ACTION(cur_state,cur_buf_p) #endif YY_DECL { register YY_CS_TYPE yy_current_state; register int yy_c; register struct yy_trans_info *yy_trans_info; register int yy_act; %% user's declarations go here if ( yy_init ) { yy_start = 1; /* first start state */ new_file: /* this is where we enter upon encountering and end-of-file and * yywrap() indicating that we should continue processing */ /* we put in the '\n' and start reading from [1] so that an * initial match-at-newline will be true. */ yy_ch_buf[0] = '\n'; yy_n_chars = 1; /* we always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR; yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; yy_eof_has_been_seen = 0; YY_FAST_INIT; yy_init = 0; } while ( 1 ) /* loops until end-of-file is reached */ { /* support of yytext and yyleng */ YY_DO_BEFORE_SCAN; /* yy_b_buf_p points to the position in yy_ch_buf of the start of the * current run. */ yy_b_buf_p = yy_c_buf_p; YY_FIND_START_STATE( yy_current_state ); YY_FIND_NEXT_MATCH; YY_DO_BEFORE_ACTION; /* we need this label to process the very last action (right before the end of * the file) */ do_action: YY_FIND_ACTION( yy_act ); #ifdef FLEX_DEBUG fprintf( stderr, "--accepting rule #%d\n", yy_act ); #endif switch ( yy_act ) { %% actions go here case YY_BACK_TRACK: YY_DO_BEFORE_SCAN; /* undo the effects of YY_DO_BEFORE_ACTION */ yy_c_buf_p = yy_last_accepting_cpos + 1; yy_current_state = yy_last_accepting_state; YY_DO_BEFORE_ACTION; goto do_action; case YY_NEW_FILE: break; /* begin reading from new file */ case YY_DO_DEFAULT: /* we have to eat up one character and recompute yytext and * yyleng */ YY_DO_BEFORE_SCAN; /* undo the effects of YY_DO_BEFORE_ACTION */ ++yy_c_buf_p; YY_DO_BEFORE_ACTION; YY_DEFAULT_ACTION; break; case YY_END_OF_BUFFER: YY_DO_BEFORE_SCAN; /* undo the effects of YY_DO_BEFORE_ACTION */ switch ( yy_get_next_buffer() ) { case EOB_ACT_END_OF_FILE: { if ( yywrap() ) { /* note: because we've taken care in * yy_get_next_buffer() to have set up yy_b_buf_p, * we can now set up yy_c_buf_p so that if some * total hoser (like flex itself) wants * to call the scanner after we return the * YY_NULL, it'll still work - another YY_NULL * will get returned. */ yy_c_buf_p = yy_b_buf_p; return ( YY_NULL ); } else goto new_file; } break; case EOB_ACT_RESTART_SCAN: yy_c_buf_p = yy_b_buf_p; YY_DO_BEFORE_RESTART; break; case EOB_ACT_LAST_MATCH: yy_c_buf_p = &yy_ch_buf[yy_n_chars]; yy_current_state = yy_get_previous_state(); YY_DO_BEFORE_ACTION; goto do_action; } break; default: printf( "action # %d\n", yy_act ); YY_FATAL_ERROR( "fatal flex scanner internal error" ); } } } /* yy_get_next_buffer - try to read in new buffer * * synopsis * int yy_get_next_buffer(); * * returns a code representing an action * EOB_ACT_LAST_MATCH - * EOB_ACT_RESTART_SCAN - restart the scanner * EOB_ACT_END_OF_FILE - end of file */ static int yy_get_next_buffer() { if ( yy_c_buf_p != &yy_ch_buf[yy_n_chars + 1] ) { YY_FATAL_ERROR( "NULL in input" ); /*NOTREACHED*/ } else { /* try to read more data */ register char *dest = yy_ch_buf; register char *source = yy_b_buf_p - 1; /* copy prev. char, too */ register int number_to_move, i; int ret_val; /* first move last chars to start of buffer */ number_to_move = yy_c_buf_p - yy_b_buf_p; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( yy_eof_has_been_seen ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ yy_n_chars = 0; else /* read in more data */ YY_INPUT( (&yy_ch_buf[number_to_move]), yy_n_chars, YY_BUF_SIZE - number_to_move - 1 ); if ( yy_n_chars == 0 ) { if ( number_to_move == 1 ) ret_val = EOB_ACT_END_OF_FILE; else ret_val = EOB_ACT_LAST_MATCH; yy_eof_has_been_seen = 1; } else ret_val = EOB_ACT_RESTART_SCAN; yy_n_chars += number_to_move; yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR; yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; /* yy_b_buf_p begins at the second character in * yy_ch_buf; the first character is the one which * preceded it before reading in the latest buffer; * it needs to be kept around in case it's a * newline, so yy_get_previous_state() will have * with '^' rules active */ yy_b_buf_p = &yy_ch_buf[1]; return ( ret_val ); } } /* yy_get_previous_state - get the state just before the eob char was reached * * synopsis * YY_CS_TYPE yy_get_previous_state(); */ static YY_CS_TYPE yy_get_previous_state() { register YY_CS_TYPE yy_cur_state; register char *yy_temp_char_ptr; YY_FIND_START_STATE( yy_cur_state ); for ( yy_temp_char_ptr = yy_b_buf_p; yy_temp_char_ptr < yy_c_buf_p; ) YY_GET_NEXT_STATE; return ( yy_cur_state ); } static unput( c ) int c; { YY_DO_BEFORE_SCAN; /* undo effects of setting up yytext */ if ( yy_c_buf_p < yy_ch_buf + 2 ) { /* need to shift things up to make room */ register int number_to_move = yy_n_chars + 2; /* +2 for EOB chars */ register char *dest = &yy_ch_buf[YY_BUF_SIZE + 2]; register char *source = &yy_ch_buf[number_to_move]; while ( source > yy_ch_buf ) *--dest = *--source; yy_c_buf_p += dest - source; yy_b_buf_p += dest - source; if ( yy_c_buf_p < yy_ch_buf + 2 ) YY_FATAL_ERROR( "flex scanner push-back overflow" ); } if ( yy_c_buf_p > yy_b_buf_p && yy_c_buf_p[-1] == '\n' ) yy_c_buf_p[-2] = '\n'; *--yy_c_buf_p = c; YY_DO_BEFORE_ACTION; /* set up yytext again */ } static int input() { int c; YY_DO_BEFORE_SCAN; if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) { /* need more input */ yy_b_buf_p = yy_c_buf_p; ++yy_c_buf_p; switch ( yy_get_next_buffer() ) { /* this code, unfortunately, is somewhat redundant with * that above */ case EOB_ACT_END_OF_FILE: { if ( yywrap() ) { yy_c_buf_p = yy_b_buf_p; return ( EOF ); } yy_ch_buf[0] = '\n'; yy_n_chars = 1; yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR; yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; yy_eof_has_been_seen = 0; YY_FAST_INIT; return ( input() ); } break; case EOB_ACT_RESTART_SCAN: yy_c_buf_p = yy_b_buf_p; break; case EOB_ACT_LAST_MATCH: YY_FATAL_ERROR( "unexpected last match in input()" ); } } c = *yy_c_buf_p++; YY_DO_BEFORE_RESTART; return ( c ); }