📄 skel.c
字号:
" YY_DO_BEFORE_ACTION;",
"",
"%% code for yylineno update goes here",
"",
"do_action: /* This label is used only to access EOF actions. */",
"",
"%% debug code goes here",
"",
" switch ( yy_act )",
" { /* beginning of action switch */",
"%% actions go here",
"",
" case YY_END_OF_BUFFER:",
" {",
" /* Amount of text matched not including the EOB char. */",
" int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;",
"",
" /* Undo the effects of YY_DO_BEFORE_ACTION. */",
" *yy_cp = yy_hold_char;",
"",
" if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )",
" {",
" /* We're scanning a new file or input source. It's",
" * possible that this happened because the user",
" * just pointed yyin at a new source and called",
" * yylex(). If so, then we have to assure",
" * consistency between yy_current_buffer and our",
" * globals. Here is the right place to do so, because",
" * this is the first action (other than possibly a",
" * back-up) that will match for the new input source.",
" */",
" yy_n_chars = yy_current_buffer->yy_n_chars;",
" yy_current_buffer->yy_input_file = yyin;",
" yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;",
" }",
"",
" /* Note that here we test for yy_c_buf_p \"<=\" to the position",
" * of the first EOB in the buffer, since yy_c_buf_p will",
" * already have been incremented past the NUL character",
" * (since all states make transitions on EOB to the",
" * end-of-buffer state). Contrast this with the test",
" * in input().",
" */",
" if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )",
" { /* This was really a NUL. */",
" yy_state_type yy_next_state;",
"",
" yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;",
"",
" yy_current_state = yy_get_previous_state();",
"",
" /* Okay, we're now positioned to make the NUL",
" * transition. We couldn't have",
" * yy_get_previous_state() go ahead and do it",
" * for us because it doesn't know how to deal",
" * with the possibility of jamming (and we don't",
" * want to build jamming into it because then it",
" * will run more slowly).",
" */",
"",
" yy_next_state = yy_try_NUL_trans( yy_current_state );",
"",
" yy_bp = yytext_ptr + YY_MORE_ADJ;",
"",
" if ( yy_next_state )",
" {",
" /* Consume the NUL. */",
" yy_cp = ++yy_c_buf_p;",
" yy_current_state = yy_next_state;",
" goto yy_match;",
" }",
"",
" else",
" {",
"%% code to do back-up for compressed tables and set up yy_cp goes here",
" goto yy_find_action;",
" }",
" }",
"",
" else switch ( yy_get_next_buffer() )",
" {",
" case EOB_ACT_END_OF_FILE:",
" {",
" yy_did_buffer_switch_on_eof = 0;",
"",
" if ( yywrap() )",
" {",
" /* Note: because we've taken care in",
" * yy_get_next_buffer() to have set up",
" * yytext, 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 = yytext_ptr + YY_MORE_ADJ;",
"",
" yy_act = YY_STATE_EOF(YY_START);",
" goto do_action;",
" }",
"",
" else",
" {",
" if ( ! yy_did_buffer_switch_on_eof )",
" YY_NEW_FILE;",
" }",
" break;",
" }",
"",
" case EOB_ACT_CONTINUE_SCAN:",
" yy_c_buf_p =",
" yytext_ptr + yy_amount_of_matched_text;",
"",
" yy_current_state = yy_get_previous_state();",
"",
" yy_cp = yy_c_buf_p;",
" yy_bp = yytext_ptr + YY_MORE_ADJ;",
" goto yy_match;",
"",
" case EOB_ACT_LAST_MATCH:",
" yy_c_buf_p =",
" &yy_current_buffer->yy_ch_buf[yy_n_chars];",
"",
" yy_current_state = yy_get_previous_state();",
"",
" yy_cp = yy_c_buf_p;",
" yy_bp = yytext_ptr + YY_MORE_ADJ;",
" goto yy_find_action;",
" }",
" break;",
" }",
"",
" default:",
" YY_FATAL_ERROR(",
" \"fatal flex scanner internal error--no action found\" );",
" } /* end of action switch */",
" } /* end of scanning one token */",
" } /* end of yylex */",
"",
"%+",
"yyFlexLexer::yyFlexLexer( istream* arg_yyin, ostream* arg_yyout )",
" {",
" yyin = arg_yyin;",
" yyout = arg_yyout;",
" yy_c_buf_p = 0;",
" yy_init = 1;",
" yy_start = 0;",
" yy_flex_debug = 0;",
" yylineno = 1; // this will only get updated if %option yylineno",
"",
" yy_did_buffer_switch_on_eof = 0;",
"",
" yy_looking_for_trail_begin = 0;",
" yy_more_flag = 0;",
" yy_more_len = 0;",
"",
" yy_start_stack_ptr = yy_start_stack_depth = 0;",
" yy_start_stack = 0;",
"",
" yy_current_buffer = 0;",
"",
"#ifdef YY_USES_REJECT",
" yy_state_buf = new yy_state_type[YY_BUF_SIZE + 2];",
"#else",
" yy_state_buf = 0;",
"#endif",
" }",
"",
"yyFlexLexer::~yyFlexLexer()",
" {",
" delete yy_state_buf;",
" yy_delete_buffer( yy_current_buffer );",
" }",
"",
"void yyFlexLexer::switch_streams( istream* new_in, ostream* new_out )",
" {",
" if ( new_in )",
" {",
" yy_delete_buffer( yy_current_buffer );",
" yy_switch_to_buffer( yy_create_buffer( new_in, YY_BUF_SIZE ) );",
" }",
"",
" if ( new_out )",
" yyout = new_out;",
" }",
"",
"#ifdef YY_INTERACTIVE",
"int yyFlexLexer::LexerInput( char* buf, int /* max_size */ )",
"#else",
"int yyFlexLexer::LexerInput( char* buf, int max_size )",
"#endif",
" {",
" if ( yyin->eof() || yyin->fail() )",
" return 0;",
"",
"#ifdef YY_INTERACTIVE",
" yyin->get( buf[0] );",
"",
" if ( yyin->eof() )",
" return 0;",
"",
" if ( yyin->bad() )",
" return -1;",
"",
" return 1;",
"",
"#else",
" (void) yyin->read( buf, max_size );",
"",
" if ( yyin->bad() )",
" return -1;",
" else",
" return yyin->gcount();",
"#endif",
" }",
"",
"void yyFlexLexer::LexerOutput( const char* buf, int size )",
" {",
" (void) yyout->write( buf, size );",
" }",
"%*",
"",
"/* yy_get_next_buffer - try to read in a new buffer",
" *",
" * Returns a code representing an action:",
" * EOB_ACT_LAST_MATCH -",
" * EOB_ACT_CONTINUE_SCAN - continue scanning from current position",
" * EOB_ACT_END_OF_FILE - end of file",
" */",
"",
"%-",
"static int yy_get_next_buffer()",
"%+",
"int yyFlexLexer::yy_get_next_buffer()",
"%*",
" {",
" register char *dest = yy_current_buffer->yy_ch_buf;",
" register char *source = yytext_ptr;",
" register int number_to_move, i;",
" int ret_val;",
"",
" if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )",
" YY_FATAL_ERROR(",
" \"fatal flex scanner internal error--end of buffer missed\" );",
"",
" if ( yy_current_buffer->yy_fill_buffer == 0 )",
" { /* Don't try to fill the buffer, so this is an EOF. */",
" if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )",
" {",
" /* We matched a singled characater, the EOB, so",
" * treat this as a final EOF.",
" */",
" return EOB_ACT_END_OF_FILE;",
" }",
"",
" else",
" {",
" /* We matched some text prior to the EOB, first",
" * process it.",
" */",
" return EOB_ACT_LAST_MATCH;",
" }",
" }",
"",
" /* Try to read more data. */",
"",
" /* First move last chars to start of buffer. */",
" number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;",
"",
" for ( i = 0; i < number_to_move; ++i )",
" *(dest++) = *(source++);",
"",
" if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )",
" /* don't do the read, it's not guaranteed to return an EOF,",
" * just force an EOF",
" */",
" yy_n_chars = 0;",
"",
" else",
" {",
" int num_to_read =",
" yy_current_buffer->yy_buf_size - number_to_move - 1;",
"",
" while ( num_to_read <= 0 )",
" { /* Not enough room in the buffer - grow it. */",
"#ifdef YY_USES_REJECT",
" YY_FATAL_ERROR(",
"\"input buffer overflow, can't enlarge buffer because scanner uses REJECT\" );",
"#else",
"",
" /* just a shorter name for the current buffer */",
" YY_BUFFER_STATE b = yy_current_buffer;",
"",
" int yy_c_buf_p_offset =",
" (int) (yy_c_buf_p - b->yy_ch_buf);",
"",
" if ( b->yy_is_our_buffer )",
" {",
" int new_size = b->yy_buf_size * 2;",
"",
" if ( new_size <= 0 )",
" b->yy_buf_size += b->yy_buf_size / 8;",
" else",
" b->yy_buf_size *= 2;",
"",
" b->yy_ch_buf = (char *)",
" /* Include room in for 2 EOB chars. */",
" yy_flex_realloc( (void *) b->yy_ch_buf,",
" b->yy_buf_size + 2 );",
" }",
" else",
" /* Can't grow it, we don't own it. */",
" b->yy_ch_buf = 0;",
"",
" if ( ! b->yy_ch_buf )",
" YY_FATAL_ERROR(",
" \"fatal error - scanner input buffer overflow\" );",
"",
" yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];",
"",
" num_to_read = yy_current_buffer->yy_buf_size -",
" number_to_move - 1;",
"#endif",
" }",
"",
" if ( num_to_read > YY_READ_BUF_SIZE )",
" num_to_read = YY_READ_BUF_SIZE;",
"",
" /* Read in more data. */",
" YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),",
" yy_n_chars, num_to_read );",
" }",
"",
" if ( yy_n_chars == 0 )",
" {",
" if ( number_to_move == YY_MORE_ADJ )",
" {",
" ret_val = EOB_ACT_END_OF_FILE;",
" yyrestart( yyin );",
" }",
"",
" else",
" {",
" ret_val = EOB_ACT_LAST_MATCH;",
" yy_current_buffer->yy_buffer_status =",
" YY_BUFFER_EOF_PENDING;",
" }",
" }",
"",
" else",
" ret_val = EOB_ACT_CONTINUE_SCAN;",
"",
" yy_n_chars += number_to_move;",
" yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;",
" yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;",
"",
" yytext_ptr = &yy_current_buffer->yy_ch_buf[0];",
"",
" return ret_val;",
" }",
"",
"",
"/* yy_get_previous_state - get the state just before the EOB char was reached */",
"",
"%-",
"static yy_state_type yy_get_previous_state()",
"%+",
"yy_state_type yyFlexLexer::yy_get_previous_state()",
"%*",
" {",
" register yy_state_type yy_current_state;",
" register char *yy_cp;",
"",
"%% code to get the start state into yy_current_state goes here",
"",
" for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )",
" {",
"%% code to find the next state goes here",
" }",
"",
" return yy_current_state;",
" }",
"",
"",
"/* yy_try_NUL_trans - try to make a transition on the NUL character",
" *",
" * synopsis",
" * next_state = yy_try_NUL_trans( current_state );",
" */",
"",
"%-",
"#ifdef YY_USE_PROTOS",
"static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )",
"#else",
"static yy_state_type yy_try_NUL_trans( yy_current_state )",
"yy_state_type yy_current_state;",
"#endif",
"%+",
"yy_state_type yyFlexLexer::yy_try_NUL_trans( yy_state_type yy_current_state )",
"%*",
" {",
" register int yy_is_jam;",
"%% code to find the next state, and perhaps do backing up, goes here",
"",
" return yy_is_jam ? 0 : yy_current_state;",
" }",
"",
"",
"%-",
"#ifndef YY_NO_UNPUT",
"#ifdef YY_USE_PROTOS",
"static void yyunput( int c, register char *yy_bp )",
"#else",
"static void yyunput( c, yy_bp )",
"int c;",
"register char *yy_bp;",
"#endif",
"%+",
"void yyFlexLexer::yyunput( int c, register char* yy_bp )",
"%*",
" {",
" register char *yy_cp = yy_c_buf_p;",
"",
" /* undo effects of setting up yytext */",
" *yy_cp = yy_hold_char;",
"",
" if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )",
" { /* need to shift things up to make room */",
" /* +2 for EOB chars. */",
" register int number_to_move = yy_n_chars + 2;",
" register char *dest = &yy_current_buffer->yy_ch_buf[",
" yy_current_buffer->yy_buf_size + 2];",
" register char *source =",
" &yy_current_buffer->yy_ch_buf[number_to_move];",
"",
" while ( source > yy_current_buffer->yy_ch_buf )",
" *--dest = *--source;",
"",
" yy_cp += (int) (dest - source);",
" yy_bp += (int) (dest - source);",
" yy_n_chars = yy_current_buffer->yy_buf_size;",
"",
" if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )",
" YY_FATAL_ERROR( \"flex scanner push-back overflow\" );",
" }",
"",
" *--yy_cp = (char) c;",
"",
"%% update yylineno here",
"",
" yytext_ptr = yy_bp;",
" yy_hold_char = *yy_cp;",
" yy_c_buf_p = yy_cp;",
" }",
"%-",
"#endif /* ifndef YY_NO_UNPUT */",
"%*",
"",
"",
"%-",
"#ifdef __cplusplus",
"static int yyinput()",
"#else",
"static int input()",
"#endif",
"%+",
"int yyFlexLexer::yyinput()",
"%*",
" {",
" int c;",
"",
" *yy_c_buf_p = yy_hold_char;",
"",
" if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )",
" {",
" /* yy_c_buf_p now points to the character we want to return.",
" * If this occurs *before* the EOB characters, then it's a",
" * valid NUL; if not, then we've hit the end of the buffer.",
" */",
" if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )",
" /* This was really a NUL. */",
" *yy_c_buf_p = '\\0';",
"",
" else",
" { /* need more input */",
" yytext_ptr = yy_c_buf_p;",
" ++yy_c_buf_p;",
"",
" switch ( yy_get_next_buffer() )",
" {",
" case EOB_ACT_END_OF_FILE:",
" {",
" if ( yywrap() )",
" {",
" yy_c_buf_p =",
" yytext_ptr + YY_MORE_ADJ;",
" return EOF;",
" }",
"",
" if ( ! yy_did_buffer_switch_on_eof )",
" YY_NEW_FILE;",
"#ifdef __cplusplus",
" return yyinput();",
"#else",
" return input();",
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -