📄 scan.cpp
字号:
* have been set up. */#ifndef YY_USER_ACTION#define YY_USER_ACTION#endif/* Code executed at the end of each rule. */#ifndef YY_BREAK#define YY_BREAK break;#endifYY_DECL { register yy_state_type yy_current_state; register char *yy_cp, *yy_bp; register int yy_act;# line 14 "scan.l" if ( yy_init ) {#ifdef YY_USER_INIT YY_USER_INIT;#endif if ( ! yy_start ) yy_start = 1; /* first start state */ if ( ! yyin ) yyin = stdin; if ( ! yyout ) yyout = stdout; if ( yy_current_buffer ) yy_init_buffer( yy_current_buffer, yyin ); else yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); yy_load_buffer_state(); yy_init = 0; } while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = yy_c_buf_p; /* Support of yytext. */ *yy_cp = yy_hold_char; /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = yy_start;yy_match: do { register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if ( yy_accept[yy_current_state] ) { yy_last_accepting_state = yy_current_state; yy_last_accepting_cpos = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 95 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } while ( yy_base[yy_current_state] != 108 );yy_find_action: yy_act = yy_accept[yy_current_state]; YY_DO_BEFORE_ACTION;do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = yy_hold_char; yy_cp = yy_last_accepting_cpos; yy_current_state = yy_last_accepting_state; goto yy_find_action;case 1:YY_USER_ACTION# line 16 "scan.l"; YY_BREAKcase 2:YY_USER_ACTION# line 17 "scan.l"; YY_BREAKcase 3:YY_USER_ACTION# line 18 "scan.l"{ yylval.dbl = strtod((const char *)yytext, NULL); return DBLCONST; } YY_BREAKcase 4:YY_USER_ACTION# line 22 "scan.l"{ yylval.number = atoi((const char *)yytext); return INTCONST; } YY_BREAKcase 5:# line 26 "scan.l"case 6:# line 27 "scan.l"case 7:# line 28 "scan.l"case 8:# line 29 "scan.l"case 9:# line 30 "scan.l"case 10:# line 31 "scan.l"case 11:# line 32 "scan.l"case 12:YY_USER_ACTION# line 32 "scan.l"{ return yytext[0]; } YY_BREAKcase 13:YY_USER_ACTION# line 33 "scan.l"{ return opNE; } YY_BREAKcase 14:YY_USER_ACTION# line 34 "scan.l"{ return opLE; } YY_BREAKcase 15:YY_USER_ACTION# line 35 "scan.l"{ return opGE; } YY_BREAKcase 16:YY_USER_ACTION# line 37 "scan.l"{ return CREATE; } YY_BREAKcase 17:YY_USER_ACTION# line 38 "scan.l"{ return OPEN; } YY_BREAKcase 18:YY_USER_ACTION# line 39 "scan.l"{ return CLOSE; } YY_BREAKcase 19:YY_USER_ACTION# line 40 "scan.l"{ return DROP; } YY_BREAKcase 20:YY_USER_ACTION# line 41 "scan.l"{ return INSERT; } YY_BREAKcase 21:YY_USER_ACTION# line 42 "scan.l"{ return DELETE; } YY_BREAKcase 22:YY_USER_ACTION# line 43 "scan.l"{ return SELECT; } YY_BREAKcase 23:YY_USER_ACTION# line 44 "scan.l"{ return DEBUG; } YY_BREAKcase 24:YY_USER_ACTION# line 45 "scan.l"{ return DUMP; } YY_BREAKcase 25:YY_USER_ACTION# line 46 "scan.l"{ return HELP; } YY_BREAKcase 26:YY_USER_ACTION# line 47 "scan.l"{ return FROM; } YY_BREAKcase 27:YY_USER_ACTION# line 48 "scan.l"{ return AND; } YY_BREAKcase 28:YY_USER_ACTION# line 49 "scan.l"{ return OR; } YY_BREAKcase 29:YY_USER_ACTION# line 50 "scan.l"{ return NOT; } YY_BREAKcase 30:YY_USER_ACTION# line 51 "scan.l"{ return WHERE; } YY_BREAKcase 31:YY_USER_ACTION# line 52 "scan.l"{ return QUIT; } YY_BREAKcase 32:YY_USER_ACTION# line 53 "scan.l"{ yylval.string = strdup((const char *)yytext); return ID; } YY_BREAKcase 33:YY_USER_ACTION# line 54 "scan.l"{ return NL; } YY_BREAKcase YY_STATE_EOF(INITIAL):# line 55 "scan.l"{ yyterminate(); } YY_BREAKcase 34:YY_USER_ACTION# line 56 "scan.l"{ cerr << "Lexical error in input string: invalid character\n"; return ERROR; } YY_BREAKcase 35:YY_USER_ACTION# line 59 "scan.l"ECHO; YY_BREAK case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = 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 { yy_cp = yy_c_buf_p; 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 *//* 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() { register char *dest = yy_current_buffer->yy_ch_buf; register char *source = yytext_ptr - 1; /* copy prev. char, too */ 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 = yy_c_buf_p - yytext_ptr; 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 = yy_c_buf_p - b->yy_ch_buf; b->yy_buf_size *= 2; b->yy_ch_buf = (char *) yy_flex_realloc( (void *) b->yy_ch_buf, b->yy_buf_size ); 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 ); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -