?? ael_lex.c
字號:
yy_current_state = yyg->yy_start;yy_match: do { register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if ( yy_accept[yy_current_state] ) { yyg->yy_last_accepting_state = yy_current_state; yyg->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 >= 285 ) 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_current_state != 284 ); yy_cp = yyg->yy_last_accepting_cpos; yy_current_state = yyg->yy_last_accepting_state;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 = yyg->yy_hold_char; yy_cp = yyg->yy_last_accepting_cpos; yy_current_state = yyg->yy_last_accepting_state; goto yy_find_action;case 1:YY_RULE_SETUP#line 219 "ael.flex"{ STORE_POS; return LC;} YY_BREAKcase 2:YY_RULE_SETUP#line 220 "ael.flex"{ STORE_POS; return RC;} YY_BREAKcase 3:YY_RULE_SETUP#line 221 "ael.flex"{ STORE_POS; return LP;} YY_BREAKcase 4:YY_RULE_SETUP#line 222 "ael.flex"{ STORE_POS; return RP;} YY_BREAKcase 5:YY_RULE_SETUP#line 223 "ael.flex"{ STORE_POS; return SEMI;} YY_BREAKcase 6:YY_RULE_SETUP#line 224 "ael.flex"{ STORE_POS; return EQ;} YY_BREAKcase 7:YY_RULE_SETUP#line 225 "ael.flex"{ STORE_POS; return COMMA;} YY_BREAKcase 8:YY_RULE_SETUP#line 226 "ael.flex"{ STORE_POS; return COLON;} YY_BREAKcase 9:YY_RULE_SETUP#line 227 "ael.flex"{ STORE_POS; return AMPER;} YY_BREAKcase 10:YY_RULE_SETUP#line 228 "ael.flex"{ STORE_POS; return BAR;} YY_BREAKcase 11:YY_RULE_SETUP#line 229 "ael.flex"{ STORE_POS; return EXTENMARK;} YY_BREAKcase 12:YY_RULE_SETUP#line 230 "ael.flex"{ STORE_POS; return AT;} YY_BREAKcase 13:YY_RULE_SETUP#line 231 "ael.flex"{/*comment*/} YY_BREAKcase 14:YY_RULE_SETUP#line 232 "ael.flex"{ STORE_POS; return KW_CONTEXT;} YY_BREAKcase 15:YY_RULE_SETUP#line 233 "ael.flex"{ STORE_POS; return KW_ABSTRACT;} YY_BREAKcase 16:YY_RULE_SETUP#line 234 "ael.flex"{ STORE_POS; return KW_EXTEND;} YY_BREAKcase 17:YY_RULE_SETUP#line 235 "ael.flex"{ STORE_POS; return KW_MACRO;}; YY_BREAKcase 18:YY_RULE_SETUP#line 236 "ael.flex"{ STORE_POS; return KW_GLOBALS;} YY_BREAKcase 19:YY_RULE_SETUP#line 237 "ael.flex"{ STORE_POS; return KW_LOCAL;} YY_BREAKcase 20:YY_RULE_SETUP#line 238 "ael.flex"{ STORE_POS; return KW_IGNOREPAT;} YY_BREAKcase 21:YY_RULE_SETUP#line 239 "ael.flex"{ STORE_POS; return KW_SWITCH;} YY_BREAKcase 22:YY_RULE_SETUP#line 240 "ael.flex"{ STORE_POS; return KW_IF;} YY_BREAKcase 23:YY_RULE_SETUP#line 241 "ael.flex"{ STORE_POS; return KW_IFTIME;} YY_BREAKcase 24:YY_RULE_SETUP#line 242 "ael.flex"{ STORE_POS; return KW_RANDOM;} YY_BREAKcase 25:YY_RULE_SETUP#line 243 "ael.flex"{ STORE_POS; return KW_REGEXTEN;} YY_BREAKcase 26:YY_RULE_SETUP#line 244 "ael.flex"{ STORE_POS; return KW_HINT;} YY_BREAKcase 27:YY_RULE_SETUP#line 245 "ael.flex"{ STORE_POS; return KW_ELSE;} YY_BREAKcase 28:YY_RULE_SETUP#line 246 "ael.flex"{ STORE_POS; return KW_GOTO;} YY_BREAKcase 29:YY_RULE_SETUP#line 247 "ael.flex"{ STORE_POS; return KW_JUMP;} YY_BREAKcase 30:YY_RULE_SETUP#line 248 "ael.flex"{ STORE_POS; return KW_RETURN;} YY_BREAKcase 31:YY_RULE_SETUP#line 249 "ael.flex"{ STORE_POS; return KW_BREAK;} YY_BREAKcase 32:YY_RULE_SETUP#line 250 "ael.flex"{ STORE_POS; return KW_CONTINUE;} YY_BREAKcase 33:YY_RULE_SETUP#line 251 "ael.flex"{ STORE_POS; return KW_FOR;} YY_BREAKcase 34:YY_RULE_SETUP#line 252 "ael.flex"{ STORE_POS; return KW_WHILE;} YY_BREAKcase 35:YY_RULE_SETUP#line 253 "ael.flex"{ STORE_POS; return KW_CASE;} YY_BREAKcase 36:YY_RULE_SETUP#line 254 "ael.flex"{ STORE_POS; return KW_DEFAULT;} YY_BREAKcase 37:YY_RULE_SETUP#line 255 "ael.flex"{ STORE_POS; return KW_PATTERN;} YY_BREAKcase 38:YY_RULE_SETUP#line 256 "ael.flex"{ STORE_POS; return KW_CATCH;} YY_BREAKcase 39:YY_RULE_SETUP#line 257 "ael.flex"{ STORE_POS; return KW_SWITCHES;} YY_BREAKcase 40:YY_RULE_SETUP#line 258 "ael.flex"{ STORE_POS; return KW_ESWITCHES;} YY_BREAKcase 41:YY_RULE_SETUP#line 259 "ael.flex"{ STORE_POS; return KW_INCLUDES;} YY_BREAKcase 42:YY_RULE_SETUP#line 260 "ael.flex"{ BEGIN(comment); my_col += 2; } YY_BREAKcase 43:YY_RULE_SETUP#line 262 "ael.flex"{ my_col += yyleng; } YY_BREAKcase 44:/* rule 44 can match eol */YY_RULE_SETUP#line 263 "ael.flex"{ ++my_lineno; my_col=1;} YY_BREAKcase 45:YY_RULE_SETUP#line 264 "ael.flex"{ my_col += yyleng; } YY_BREAKcase 46:/* rule 46 can match eol */YY_RULE_SETUP#line 265 "ael.flex"{ ++my_lineno; my_col=1;} YY_BREAKcase 47:YY_RULE_SETUP#line 266 "ael.flex"{ my_col += 2; BEGIN(INITIAL); } /* the nice thing about comments is that you know exactly what ends them */ YY_BREAKcase 48:/* rule 48 can match eol */YY_RULE_SETUP#line 268 "ael.flex"{ my_lineno++; my_col = 1; } YY_BREAKcase 49:YY_RULE_SETUP#line 269 "ael.flex"{ my_col += yyleng; } YY_BREAKcase 50:YY_RULE_SETUP#line 270 "ael.flex"{ my_col += (yyleng*8)-(my_col%8); } YY_BREAKcase 51:YY_RULE_SETUP#line 272 "ael.flex"{ /* boy did I open a can of worms when I changed the lexical token "word". all the above keywords can be used as a beginning to a "word".- before, a "word" would match a longer sequence than the above keywords, and all would be well. But now "word" is a single char and feeds into a statemachine sort of sequence from there on. So... I added the {KEYWORD}? to the beginning of the word match sequence */ if (!strcmp(yytext,"${")) { parencount2 = 0; pbcpos2 = 0; pbcpush2('{'); /* push '{' so the last pcbpop (parencount2 = -1) will succeed */ BEGIN(curlystate); yymore(); } else if (!strcmp(yytext,"$[")) { parencount3 = 0; pbcpos3 = 0; pbcpush3('['); /* push '[' so the last pcbpop (parencount3 = -1) will succeed */ BEGIN(brackstate); yymore(); } else { BEGIN(wordstate); yymore(); } } YY_BREAKcase 52:YY_RULE_SETUP#line 298 "ael.flex"{ yymore(); /* Keep going */ } YY_BREAKcase 53:YY_RULE_SETUP#line 299 "ael.flex"{ yymore(); /* Keep going */ } YY_BREAKcase 54:YY_RULE_SETUP#line 300 "ael.flex"{ yymore(); /* Keep Going */ } YY_BREAKcase 55:YY_RULE_SETUP#line 301 "ael.flex"{ /* the beginning of a ${} construct. prepare and pop into curlystate */ parencount2 = 0; pbcpos2 = 0; pbcpush2('{'); /* push '{' so the last pcbpop (parencount2 = -1) will succeed */ BEGIN(curlystate); yymore(); } YY_BREAKcase 56:YY_RULE_SETUP#line 308 "ael.flex"{ /* the beginning of a $[] construct. prepare and pop into brackstate */ parencount3 = 0; pbcpos3 = 0; pbcpush3('['); /* push '[' so the last pcbpop (parencount3 = -1) will succeed */ BEGIN(brackstate); yymore(); } YY_BREAKcase 57:/* rule 57 can match eol */YY_RULE_SETUP#line 315 "ael.flex"{ /* a non-word constituent char, like a space, tab, curly, paren, etc */ char c = yytext[yyleng-1]; STORE_POS; yylval->str = malloc(yyleng); strncpy(yylval->str, yytext, yyleng); yylval->str[yyleng-1] = 0; unput(c); /* put this ending char back in the stream */ BEGIN(0); return word; } YY_BREAKcase 58:/* rule 58 can match eol */YY_RULE_SETUP#line 328 "ael.flex"{ if ( pbcpop2('}') ) { /* error */ STORE_LOC; ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Mismatched ')' in expression: %s !\n", my_file, my_lineno, my_col, yytext); BEGIN(0); yylval->str = malloc(yyleng+1); strncpy(yylval->str, yytext, yyleng); yylval->str[yyleng] = 0; return word; } parencount2--; if ( parencount2 >= 0) { yymore(); } else { BEGIN(wordstate); /* Finished with the current ${} construct. Return to word gathering state */ yymore(); } } YY_BREAKcase 59:/* rule 59 can match eol */YY_RULE_SETUP#line 347 "ael.flex"{ char c = yytext[yyleng-1]; if (c == '{') parencount2++; pbcpush2(c); yymore(); } YY_BREAKcase 60:/* rule 60 can match eol */YY_RULE_SETUP#line 355 "ael.flex"{ char c = yytext[yyleng-1]; if ( pbcpop2(c)) { /* error */ STORE_LOC;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -