📄 flex.c
字号:
#ifndef YY_NO_TOP_STATEstatic int yy_top_state YY_PROTO ((void));#endif#else#define YY_NO_PUSH_STATE 1#define YY_NO_POP_STATE 1#define YY_NO_TOP_STATE 1#endif#ifdef YY_MALLOC_DECLYY_MALLOC_DECL#else#if __STDC__#ifndef __cplusplus#include <stdlib.h>#endif#else/* Just try to get by without declaring the routines. This will fail * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int) * or sizeof(void*) != sizeof(int). */#endif#endif/* Amount of stuff to slurp up with each read. */#ifndef YY_READ_BUF_SIZE#define YY_READ_BUF_SIZE 8192#endif/* Copy whatever the last rule matched to the standard output. */#ifndef ECHO/* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */#define ECHO (void) fwrite( yytext, yyleng, 1, yyout )#endif/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */#ifndef YY_INPUT#define YY_INPUT(buf,result,max_size) \ if ( yy_current_buffer->yy_is_interactive ) \ { \ int c = '*', n; \ for ( n = 0; n < max_size && \ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ if ( c == '\n' ) \ buf[n++] = (char) c; \ if ( c == EOF && ferror( yyin ) ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ result = n; \ } \ else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \ && ferror( yyin ) ) \ YY_FATAL_ERROR( "input in flex scanner failed" );#endif/* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */#ifndef yyterminate#define yyterminate() return YY_NULL#endif/* Number of entries by which start-condition stack grows. */#ifndef YY_START_STACK_INCR#define YY_START_STACK_INCR 25#endif/* Report a fatal error. */#ifndef YY_FATAL_ERROR#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )#endif/* Default declaration of generated scanner - a define so the user can * easily add parameters. */#ifndef YY_DECL#define YY_DECL int yylex YY_PROTO(( void ))#endif/* Code executed at the beginning of each rule, after yytext and yyleng * 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;#endif#define YY_RULE_SETUP \ if ( yyleng > 0 ) \ yy_current_buffer->yy_at_bol = \ (yytext[yyleng - 1] == '\n'); \ YY_USER_ACTIONYY_DECL{ register yy_state_type yy_current_state; register char *yy_cp = NULL, *yy_bp = NULL; register int yy_act; if (yy_init) { yy_init = 0;#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_current_buffer = yy_create_buffer (yyin, YY_BUF_SIZE); yy_load_buffer_state (); } while (1) /* loops until end-of-file is reached */ { yy_more_len = 0; if (yy_more_flag) { yy_more_len = yy_c_buf_p - yytext_ptr; yy_more_flag = 0; } 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_current_state += YY_AT_BOL (); yy_state_ptr = yy_state_buf; *yy_state_ptr++ = yy_current_state; yy_match: do { register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI (*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 >= 668) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; *yy_state_ptr++ = yy_current_state; ++yy_cp; } while (yy_base[yy_current_state] != 1950); yy_find_action: yy_current_state = *--yy_state_ptr; yy_lp = yy_accept[yy_current_state]; find_rule: /* we branch to this label when backing up */ for (;;) /* until we find what rule we matched */ { if (yy_lp && yy_lp < yy_accept[yy_current_state + 1]) { yy_act = yy_acclist[yy_lp]; if (yy_act & YY_TRAILING_HEAD_MASK || yy_looking_for_trail_begin) { if (yy_act == yy_looking_for_trail_begin) { yy_looking_for_trail_begin = 0; yy_act &= ~YY_TRAILING_HEAD_MASK; break; } } else if (yy_act & YY_TRAILING_MASK) { yy_looking_for_trail_begin = yy_act & ~YY_TRAILING_MASK; yy_looking_for_trail_begin |= YY_TRAILING_HEAD_MASK; } else { yy_full_match = yy_cp; yy_full_state = yy_state_ptr; yy_full_lp = yy_lp; break; } ++yy_lp; goto find_rule; } --yy_cp; yy_current_state = *--yy_state_ptr; yy_lp = 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 YY_STATE_EOF (INITIAL): case YY_STATE_EOF (PRELNO): case YY_STATE_EOF (PASTLNO): case YY_STATE_EOF (IMPORT): case YY_STATE_EOF (IMPORT_DONE): { if (--include_stack_ptr < 0) { return tEOPROG; } else { if (!is_bound) { yy_delete_buffer (YY_CURRENT_BUFFER); yy_switch_to_buffer (include_stack[include_stack_ptr]); } flex_line += yylval.sep = -1; return tSEP; } } YY_BREAK case 1: YY_RULE_SETUP { BEGIN (INITIAL); } /* ignore whitespace */ YY_BREAK case 2: YY_RULE_SETUP { BEGIN (PRELNO); return tLABEL; } YY_BREAK case 3: YY_RULE_SETUP { BEGIN (PASTLNO); yylval.symbol = (char *) my_strdup (yytext); return tSYMBOL; } YY_BREAK case 4: YY_RULE_SETUP { BEGIN (INITIAL); flex_line += yylval.sep = 0; yyless (0); return tSEP; } YY_BREAK case 5: YY_RULE_SETUP { if (fi_pending) { fi_pending--; yyless (0); return tENDIF; } BEGIN (INITIAL); flex_line += yylval.sep = 1; return tSEP; } YY_BREAK case 6: YY_RULE_SETUP { if (fi_pending) { fi_pending--; yyless (0); return tENDIF; } if (interactive && !inlib) { return tEOPROG; } else { flex_line += yylval.sep = 2; return tSEP; } } YY_BREAK case 7: YY_RULE_SETUP { if (fi_pending) { fi_pending--; yyless (0); return tENDIF; } flex_line += yylval.sep = 1; return tSEP; } YY_BREAK case 8: YY_RULE_SETUP { if (fi_pending && check_compat) error_with_line (WARNING, "short-if has changed in version 2.71", flex_line); flex_line += yylval.sep = 0; return tSEP; } YY_BREAK case 9: YY_RULE_SETUP { flex_line += yylval.sep = 0; return tSEP; } /* comments span 'til end of line */ YY_BREAK case 10: YY_RULE_SETUP { flex_line += yylval.sep = 0; return tSEP; } /* comments span 'til end of line */ YY_BREAK case 11: YY_RULE_SETUP { if (fi_pending) { fi_pending--; yyless (0); return tENDIF; } flex_line += yylval.sep = 1; return tSEP; } YY_BREAK case 12: YY_RULE_SETUP { yymore (); } YY_BREAK case 13: YY_RULE_SETUP { BEGIN (IMPORT); } YY_BREAK case 14: YY_RULE_SETUP { if (!import_lib (yytext)) return 0; BEGIN (IMPORT_DONE); return tIMPORT; } YY_BREAK case 15: YY_RULE_SETUP { if (yytext[0] == '\n' && fi_pending) { fi_pending--; yyless (0); return tENDIF; } BEGIN (INITIAL); yyless (0); flex_line += yylval.sep = 0; return tSEP; } YY_BREAK case 16: YY_RULE_SETUP { char *where = strpbrk (yytext, " \t\r\f\v"); yylval.docu = (char *) my_strdup (where ? where + 1 : NULL); return tDOCU; } YY_BREAK case 17: YY_RULE_SETUP { flex_line += yylval.sep = 1; return tSEP; } /* '#' as first character may introduce comments too */ YY_BREAK case 18: YY_RULE_SETUP { flex_line += yylval.sep = 1; return tSEP; } /* ' as first character may introduce comments too */ YY_BREAK case 19: YY_RULE_SETUP return tEXECUTE; YY_BREAK case 20: YY_RULE_SETUP return tEXECUTE2; YY_BREAK case 21: YY_RULE_SETUP return tCOMPILE; YY_BREAK case 22: YY_RULE_SETUP return tRUNTIME_CREATED_SUB; YY_BREAK case 23: YY_RULE_SETUP return tENDSUB;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -