📄 lexer.c
字号:
/* 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_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 >= 797 ) 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] != 1163 );yy_find_action: yy_act = yy_accept[yy_current_state]; if ( yy_act == 0 ) { /* have to back up */ yy_cp = yy_last_accepting_cpos; yy_current_state = yy_last_accepting_state; 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_RULE_SETUP#line 121 "lexer.l"{ BEGIN(COMMENT); sn_advance_column(2); } YY_BREAKcase 2:*yy_cp = yy_hold_char; /* undo effects of setting up yytext */yy_c_buf_p = yy_cp -= 1;YY_DO_BEFORE_ACTION; /* set up yytext again */YY_RULE_SETUP#line 123 "lexer.l"{ sn_advance_column(yyleng); } YY_BREAKcase 3:YY_RULE_SETUP#line 125 "lexer.l"{ char *filename, *end; filename = strchr(yytext, '\"'); if (!filename) { filename = strchr(yytext, '<'); } /* Skip the leading delimiter. */ filename++; end = strchr(filename, '\"'); if (!end) { end = strchr(filename, '>'); } /* Lop off the trailing delimiter. */ *end = 0; include(filename); emit_include(filename, sn_line(), sn_column() + (filename - yytext - 1), sn_line(), sn_column() + strlen(filename) + 1); sn_advance_column(yyleng);} YY_BREAKcase 4:YY_RULE_SETUP#line 153 "lexer.l"{ sn_advance_line(); sn_reset_column(); ifdef_nesting++;} YY_BREAKcase 5:YY_RULE_SETUP#line 159 "lexer.l"{ sn_advance_line(); sn_reset_column(); BEGIN(ELSEDIRECTIVE);} YY_BREAKcase 6:YY_RULE_SETUP#line 165 "lexer.l"{ assert(ifdef_nesting >= 0); sn_advance_line(); sn_reset_column(); /* Just left a non-nested #ifdef. */ ifdef_nesting--;} YY_BREAKcase 7:YY_RULE_SETUP#line 175 "lexer.l"{ assert(ifdef_nesting >= 0); sn_advance_line(); sn_reset_column(); ifdef_nesting--; if (ifdef_nesting == 0) { /* Just fallen out of the nesting with this #endif. */ BEGIN(INITIAL); }} YY_BREAKcase 8:YY_RULE_SETUP#line 189 "lexer.l"{ /* Eat conditional code. */ sn_advance_column(1);} YY_BREAKcase 9:YY_RULE_SETUP#line 194 "lexer.l"{ /* Ditto. */ sn_advance_line(); sn_reset_column();} YY_BREAKcase 10:*yy_cp = yy_hold_char; /* undo effects of setting up yytext */yy_c_buf_p = yy_cp -= 1;YY_DO_BEFORE_ACTION; /* set up yytext again */YY_RULE_SETUP#line 200 "lexer.l"{ /* Ignore all other C preprocessor directives. */ sn_advance_column(yyleng);} YY_BREAKcase 11:YY_RULE_SETUP#line 205 "lexer.l"{ sn_advance_column(2); BEGIN(PREDIRECTIVE);} YY_BREAKcase 12:YY_RULE_SETUP#line 210 "lexer.l"{ sn_advance_column(yyleng);} YY_BREAKcase 13:YY_RULE_SETUP#line 214 "lexer.l"{ sn_advance_line(); sn_reset_column();} YY_BREAKcase 14:YY_RULE_SETUP#line 219 "lexer.l"{ unput(yytext[0]); BEGIN(DIRECTIVE);} YY_BREAKcase 15:YY_RULE_SETUP#line 224 "lexer.l"{ char *filename, *end; /* Skip leading text. */ filename = strchr(yytext, '\''); if (!filename) { filename = strchr(yytext, '"'); } /* Skip the leading quote marker. */ filename++; /* Lop off the trailing quote marker. */ end = strchr(filename, '\''); if (!end) { end = strchr(filename, '"'); } *end = 0; include(filename); emit_include(filename, sn_line(), sn_column() + (filename - yytext - 1), sn_line(), sn_column() + strlen(filename) + 1); sn_advance_column(yyleng); BEGIN(POSTDIRECTIVE);} YY_BREAKcase 16:YY_RULE_SETUP#line 253 "lexer.l"{ sn_advance_column(yyleng); BEGIN(POSTDIRECTIVE);} YY_BREAKcase 17:YY_RULE_SETUP#line 258 "lexer.l"{ sn_advance_column(2); BEGIN(INITIAL);} YY_BREAKcase 18:YY_RULE_SETUP#line 263 "lexer.l"{ sn_advance_column(yyleng);} YY_BREAKcase 19:YY_RULE_SETUP#line 267 "lexer.l"{ sn_advance_line(); sn_reset_column(); BEGIN(INITIAL);} YY_BREAKcase 20:YY_RULE_SETUP#line 273 "lexer.l"{ sn_advance_column(1); /* eat junk we don't expect */ } YY_BREAKcase 21:YY_RULE_SETUP#line 275 "lexer.l"{ literal("bitstring", yytext); sn_advance_column(yyleng); return BITLITERAL;} YY_BREAKcase 22:YY_RULE_SETUP#line 281 "lexer.l"{ literal("boolean", yytext); sn_advance_column(yyleng); return BOOLITERAL;} YY_BREAKcase 23:YY_RULE_SETUP#line 287 "lexer.l"{ literal("char", yytext); sn_advance_column(yyleng); return CHARLITERAL;} YY_BREAKcase 24:YY_RULE_SETUP#line 293 "lexer.l"{ literal("empty", yytext); sn_advance_column(yyleng); return EMPTYLITERAL;} YY_BREAKcase 25:YY_RULE_SETUP#line 299 "lexer.l"{ literal("float", yytext); sn_advance_column(yyleng); return FLOATLITERAL;} YY_BREAKcase 26:YY_RULE_SETUP#line 305 "lexer.l"{ literal("integer", yytext); sn_advance_column(yyleng); return INTLITERAL;} YY_BREAKcase 27:YY_RULE_SETUP#line 311 "lexer.l"{ literal("string", yytext); sn_advance_column(yyleng); return STRINGLITERAL;} YY_BREAKcase 28:YY_RULE_SETUP#line 317 "lexer.l"{ symbol("dot"); sn_advance_column(1); return '.'; } YY_BREAKcase 29:YY_RULE_SETUP#line 318 "lexer.l"{ symbol("assignment"); sn_advance_column(2); return ASSIGN; } YY_BREAKcase 30:YY_RULE_SETUP#line 319 "lexer.l"{ symbol("less-than-or-equal"); sn_advance_column(2); return LESSTHANEQ; } YY_BREAKcase 31:YY_RULE_SETUP#line 320 "lexer.l"{ symbol("greater-than-or-equal"); sn_advance_column(2); return GREATERTHANEQ; } YY_BREAKcase 32:YY_RULE_SETUP#line 321 "lexer.l"{ symbol("less-than"); sn_advance_column(1); return '<'; } YY_BREAKcase 33:YY_RULE_SETUP#line 322 "lexer.l"{ symbol("greater-than"); sn_advance_column(1); return '>'; } YY_BREAKcase 34:YY_RULE_SETUP#line 323 "lexer.l"{ symbol("not-equal"); sn_advance_column(2); return NOTEQ; } YY_BREAKcase 35:YY_RULE_SETUP#line 324 "lexer.l"{ symbol("equal"); sn_advance_column(1); return '='; } YY_BREAKcase 36:YY_RULE_SETUP#line 325 "lexer.l"{ symbol("colon"); sn_advance_column(1); return ':'; } YY_BREAKcase 37:YY_RULE_SETUP#line 327 "lexer.l"{ symbol("semicolon"); yylval.punct.line = sn_line(); yylval.punct.startcol = sn_column(); sn_advance_column(1); yylval.punct.endcol = sn_column(); return ';';
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -