mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
402 lines
9.1 KiB
402 lines
9.1 KiB
/* 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 );
|
|
}
|