⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ael_lex.c

📁 asterisk 是一个很有知名度开源软件
💻 C
📖 第 1 页 / 共 5 页
字号:
		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 + -