亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ejparse.c

?? 開發板bios源碼 開發板bios源碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
			if (ejLexGetToken(ep, state) != TOK_LPAREN) {
				freeFunc(&func);
				goto error;
			}

			if (parse(ep, STATE_ARG_LIST, flags) != STATE_ARG_LIST_DONE) {
				freeFunc(&func);
				ep->func = saveFunc;
				goto error;
			}
/*
 *			Evaluate the function if required
 */
			if (flags & FLAGS_EXE && evalFunction(ep) < 0) {
				freeFunc(&func);
				ep->func = saveFunc;
				goto error;
			}

			freeFunc(&func);
			ep->func = saveFunc;

			if (ejLexGetToken(ep, state) != TOK_RPAREN) {
				goto error;
			}
			if (state == STATE_STMT) {
				expectSemi++;
			}
			done++;
			break;

		case TOK_IF:
			if (state != STATE_STMT) {
				goto error;
			}
			if (ejLexGetToken(ep, state) != TOK_LPAREN) {
				goto error;
			}
/*
 *			Evaluate the entire condition list "(condition)"
 */
			if (parse(ep, STATE_COND, flags) != STATE_COND_DONE) {
				goto error;
			}
			if (ejLexGetToken(ep, state) != TOK_RPAREN) {
				goto error;
			}
/*
 *			This is the "then" case. We need to always parse both cases and
 *			execute only the relevant case.
 */
			if (*ep->result == '1') {
				thenFlags = flags;
				elseFlags = flags & ~FLAGS_EXE;
			} else {
				thenFlags = flags & ~FLAGS_EXE;
				elseFlags = flags;
			}
/*
 *			Process the "then" case.  Allow for RETURN statement
 */
			switch (parse(ep, STATE_STMT, thenFlags)) {
			case STATE_RET:
				return STATE_RET;
			case STATE_STMT_DONE:
				break;
			default:
				goto error;
			}
/*
 *			check to see if there is an "else" case
 */
			ejRemoveNewlines(ep, state);
			tid = ejLexGetToken(ep, state);
			if (tid != TOK_ELSE) {
				ejLexPutbackToken(ep, tid, ep->token);
				done++;
				break;
			}
/*
 *			Process the "else" case.  Allow for return.
 */
			switch (parse(ep, STATE_STMT, elseFlags)) {
			case STATE_RET:
				return STATE_RET;
			case STATE_STMT_DONE:
				break;
			default:
				goto error;
			}
			done++;
			break;

		case TOK_FOR:
/*
 *			Format for the expression is:
 *
 *				for (initial; condition; incr) {
 *					body;
 *				}
 */
			if (state != STATE_STMT) {
				goto error;
			}
			if (ejLexGetToken(ep, state) != TOK_LPAREN) {
				goto error;
			}

/*
 *			Evaluate the for loop initialization statement
 */
			if (parse(ep, STATE_EXPR, flags) != STATE_EXPR_DONE) {
				goto error;
			}
			if (ejLexGetToken(ep, state) != TOK_SEMI) {
				goto error;
			}

/*
 *			The first time through, we save the current input context just
 *			to each step: prior to the conditional, the loop increment and the
 *			loop body.
 */
			ejLexSaveInputState(ep, &condScript);
			if (parse(ep, STATE_COND, flags) != STATE_COND_DONE) {
				goto error;
			}
			cond = (*ep->result != '0');

			if (ejLexGetToken(ep, state) != TOK_SEMI) {
				goto error;
			}

/*
 *			Don't execute the loop increment statement or the body first time
 */
			forFlags = flags & ~FLAGS_EXE;
			ejLexSaveInputState(ep, &incrScript);
			if (parse(ep, STATE_EXPR, forFlags) != STATE_EXPR_DONE) {
				goto error;
			}
			if (ejLexGetToken(ep, state) != TOK_RPAREN) {
				goto error;
			}

/*
 *			Parse the body and remember the end of the body script
 */
			ejLexSaveInputState(ep, &bodyScript);
			if (parse(ep, STATE_STMT, forFlags) != STATE_STMT_DONE) {
				goto error;
			}
			ejLexSaveInputState(ep, &endScript);

/*
 *			Now actually do the for loop. Note loop has been rotated
 */
			while (cond && (flags & FLAGS_EXE) ) {
/*
 *				Evaluate the body
 */
				ejLexRestoreInputState(ep, &bodyScript);

				switch (parse(ep, STATE_STMT, flags)) {
				case STATE_RET:
					return STATE_RET;
				case STATE_STMT_DONE:
					break;
				default:
					goto error;
				}
/*
 *				Evaluate the increment script
 */
				ejLexRestoreInputState(ep, &incrScript);
				if (parse(ep, STATE_EXPR, flags) != STATE_EXPR_DONE) {
					goto error;
				}
/*
 *				Evaluate the condition
 */
				ejLexRestoreInputState(ep, &condScript);
				if (parse(ep, STATE_COND, flags) != STATE_COND_DONE) {
					goto error;
				}
				cond = (*ep->result != '0');
			}
			ejLexRestoreInputState(ep, &endScript);
			done++;
			break;

		case TOK_VAR:
			if (parse(ep, STATE_DEC_LIST, flags) != STATE_DEC_LIST_DONE) {
				goto error;
			}
			done++;
			break;

		case TOK_COMMA:
			ejLexPutbackToken(ep, TOK_EXPR, ep->token);
			done++;
			break;

		case TOK_LPAREN:
			if (state == STATE_EXPR) {
				if (parse(ep, STATE_RELEXP, flags) != STATE_RELEXP_DONE) {
					goto error;
				}
				if (ejLexGetToken(ep, state) != TOK_RPAREN) {
					goto error;
				}
				return STATE_EXPR_DONE;
			}
			done++;
			break;

		case TOK_RPAREN:
			ejLexPutbackToken(ep, tid, ep->token);
			return STATE_EXPR_DONE;

		case TOK_LBRACE:
/*
 *			This handles any code in braces except "if () {} else {}"
 */
			if (state != STATE_STMT) {
				goto error;
			}

/*
 *			Parse will return STATE_STMT_BLOCK_DONE when the RBRACE is seen
 */
			do {
				state = parse(ep, STATE_STMT, flags);
			} while (state == STATE_STMT_DONE);

/*
 *			Allow return statement.
 */
			if (state == STATE_RET) {
				return state;
			}

			if (ejLexGetToken(ep, state) != TOK_RBRACE) {
				goto error;
			}
			return STATE_STMT_DONE;

		case TOK_RBRACE:
			if (state == STATE_STMT) {
				ejLexPutbackToken(ep, tid, ep->token);
				return STATE_STMT_BLOCK_DONE;
			}
			goto error;

		case TOK_RETURN:
			if (parse(ep, STATE_RELEXP, flags) != STATE_RELEXP_DONE) {
				goto error;
			}
			if (flags & FLAGS_EXE) {
				while ( ejLexGetToken(ep, state) != TOK_EOF );
				done++;
				return STATE_RET;
			}
			break;
		}
	}

	if (expectSemi) {
		tid = ejLexGetToken(ep, state);
		if (tid != TOK_SEMI && tid != TOK_NEWLINE) {
			goto error;
		}

/*
 *		Skip newline after semi-colon
 */
		ejRemoveNewlines(ep, state);
	}

/*
 *	Free resources and return the correct status
 */
doneParse:
	if (tid == TOK_FOR) {
		ejLexFreeInputState(ep, &condScript);
		ejLexFreeInputState(ep, &incrScript);
		ejLexFreeInputState(ep, &endScript);
		ejLexFreeInputState(ep, &bodyScript);
	}

	if (state == STATE_STMT) {
		return STATE_STMT_DONE;
	} else if (state == STATE_DEC) {
		return STATE_DEC_DONE;
	} else if (state == STATE_EXPR) {
		return STATE_EXPR_DONE;
	} else if (state == STATE_EOF) {
		return state;
	} else {
		return STATE_ERR;
	}

/*
 *	Common error exit
 */
error:
	state = STATE_ERR;
	goto doneParse;
}

/******************************************************************************/
/*
 *	Parse variable declaration list
 */

static int parseDeclaration(ej_t *ep, int state, int flags)
{
	int		tid;

	a_assert(ep);

/*
 *	Declarations can be of the following forms:
 *			var x;
 *			var x, y, z;
 *			var x = 1 + 2 / 3, y = 2 + 4;
 *
 *	We set the variable to NULL if there is no associated assignment.
 */

	do {
		if ((tid = ejLexGetToken(ep, state)) != TOK_ID) {
			return STATE_ERR;
		}
		ejLexPutbackToken(ep, tid, ep->token);

/*
 *		Parse the entire assignment or simple identifier declaration
 */
		if (parse(ep, STATE_DEC, flags) != STATE_DEC_DONE) {
			return STATE_ERR;
		}

/*
 *		Peek at the next token, continue if comma seen
 */
		tid = ejLexGetToken(ep, state);
		if (tid == TOK_SEMI) {
			return STATE_DEC_LIST_DONE;
		} else if (tid != TOK_COMMA) {
			return STATE_ERR;
		}
	} while (tid == TOK_COMMA);

	if (tid != TOK_SEMI) {
		return STATE_ERR;
	}
	return STATE_DEC_LIST_DONE;
}

/******************************************************************************/
/*
 *	Parse function arguments
 */

static int parseArgs(ej_t *ep, int state, int flags)
{
	int		tid, aid;

	a_assert(ep);

	do {
		state = parse(ep, STATE_RELEXP, flags);
		if (state == STATE_EOF || state == STATE_ERR) {
			return state;
		}
		if (state == STATE_RELEXP_DONE) {
			aid = hAlloc((void***) &ep->func->args);
			ep->func->args[aid] = bstrdup(B_L, ep->result);
			ep->func->nArgs++;
		}
/*
 *		Peek at the next token, continue if more args (ie. comma seen)
 */
		tid = ejLexGetToken(ep, state);
		if (tid != TOK_COMMA) {
			ejLexPutbackToken(ep, tid, ep->token);
		}
	} while (tid == TOK_COMMA);

	if (tid != TOK_RPAREN && state != STATE_RELEXP_DONE) {
		return STATE_ERR;
	}
	return STATE_ARG_LIST_DONE;
}

/******************************************************************************/
/*
 *	Parse conditional expression (relational ops separated by ||, &&)
 */

static int parseCond(ej_t *ep, int state, int flags)
{
	char_t	*lhs, *rhs;
	int		tid, operator;

	a_assert(ep);

	setString(B_L, &ep->result, T(""));
	rhs = lhs = NULL;
	operator = 0;

	do {
/*
 *	Recurse to handle one side of a conditional. Accumulate the
 *	left hand side and the final result in ep->result.
 */
		state = parse(ep, STATE_RELEXP, flags);
		if (state != STATE_RELEXP_DONE) {
			state = STATE_ERR;
			break;
		}

		if (operator > 0) {
			setString(B_L, &rhs, ep->result);
			if (evalCond(ep, lhs, operator, rhs) < 0) {
				state = STATE_ERR;
				break;
			}
		}
		setString(B_L, &lhs, ep->result);

		tid = ejLexGetToken(ep, state);
		if (tid == TOK_LOGICAL) {
			operator = (int) *ep->token;

		} else if (tid == TOK_RPAREN || tid == TOK_SEMI) {
			ejLexPutbackToken(ep, tid, ep->token);
			state = STATE_COND_DONE;
			break;

		} else {
			ejLexPutbackToken(ep, tid, ep->token);
		}

	} while (state == STATE_RELEXP_DONE);

	if (lhs) {
		bfree(B_L, lhs);
	}

	if (rhs) {
		bfree(B_L, rhs);
	}
	return state;
}

/******************************************************************************/
/*
 *	Parse expression (leftHandSide operator rightHandSide)
 */

static int parseExpr(ej_t *ep, int state, int flags)
{
	char_t	*lhs, *rhs;
	int		rel, tid;

	a_assert(ep);

	setString(B_L, &ep->result, T(""));
	rhs = lhs = NULL;
	rel = 0;
	tid = 0;

	do {
/*
 *	This loop will handle an entire expression list. We call parse
 *	to evalutate each term which returns the result in ep->result.
 */
		if (tid == TOK_LOGICAL) {
			if ((state = parse(ep, STATE_RELEXP, flags)) != STATE_RELEXP_DONE) {
				state = STATE_ERR;
				break;
			}
		} else {
			if ((state = parse(ep, STATE_EXPR, flags)) != STATE_EXPR_DONE) {
				state = STATE_ERR;
				break;
			}
		}

		if (rel > 0) {
			setString(B_L, &rhs, ep->result);
			if (tid == TOK_LOGICAL) {
				if (evalCond(ep, lhs, rel, rhs) < 0) {
					state = STATE_ERR;
					break;
				}
			} else {
				if (evalExpr(ep, lhs, rel, rhs) < 0) {
					state = STATE_ERR;
					break;
				}
			}
		}
		setString(B_L, &lhs, ep->result);

		if ((tid = ejLexGetToken(ep, state)) == TOK_EXPR ||
			 tid == TOK_INC_DEC || tid == TOK_LOGICAL) {
			rel = (int) *ep->token;

		} else {
			ejLexPutbackToken(ep, tid, ep->token);
			state = STATE_RELEXP_DONE;
		}

	} while (state == STATE_EXPR_DONE);

	if (rhs) {
		bfree(B_L, rhs);
	}

	if (lhs) {
		bfree(B_L, lhs);
	}

	return state;
}

/******************************************************************************/
/*
 *	Evaluate a condition. Implements &&, ||, !
 */

static int evalCond(ej_t *ep, char_t *lhs, int rel, char_t *rhs)
{
	char_t	buf[16];
	int		l, r, lval;

	a_assert(lhs);
	a_assert(rhs);
	a_assert(rel > 0);

	lval = 0;
	if (gisdigit((int)*lhs) && gisdigit((int)*rhs)) {
		l = gatoi(lhs);
		r = gatoi(rhs);
		switch (rel) {
		case COND_AND:
			lval = l && r;
			break;
		case COND_OR:
			lval = l || r;
			break;
		default:
			ejError(ep, T("Bad operator %d"), rel);
			return -1;
		}
	} else {
		if (!gisdigit((int)*lhs)) {
			ejError(ep, T("Conditional must be numeric"), lhs);
		} else {
			ejError(ep, T("Conditional must be numeric"), rhs);
		}
	}

	stritoa(lval, buf, sizeof(buf));
	setString(B_L, &ep->result, buf);
	return 0;
}

/******************************************************************************/
/*
 *	Evaluate an operation
 */

static int evalExpr(ej_t *ep, char_t *lhs, int rel, char_t *rhs)
{
	char_t	*cp, buf[16];
	int		numeric, l, r, lval;

	a_assert(lhs);
	a_assert(rhs);
	a_assert(rel > 0);

/*
 *	All of the characters in the lhs and rhs must be numeric
 */
	numeric = 1;
	for (cp = lhs; *cp; cp++) {
		if (!gisdigit((int)*cp)) {
			numeric = 0;
			break;
		}
	}

	if (numeric) {
		for (cp = rhs; *cp; cp++) {
			if (!gisdigit((int)*cp)) {
				numeric = 0;
				break;
			}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色偷偷久久人人79超碰人人澡| 国产日韩亚洲欧美综合| 精品国内片67194| 国产精品传媒入口麻豆| 日韩极品在线观看| 91麻豆精品视频| 精品卡一卡二卡三卡四在线| 亚洲男人的天堂av| 福利一区二区在线观看| 51久久夜色精品国产麻豆| 亚洲欧洲日本在线| 国产精品1区2区3区在线观看| 欧美精品乱码久久久久久| 亚洲欧洲一区二区三区| 国产一区二区福利| 精品美女一区二区| 青青草97国产精品免费观看| 欧美日韩一卡二卡| 亚洲欧美日韩在线播放| 99免费精品在线| 国产日韩精品一区二区浪潮av| 青椒成人免费视频| 欧美电影一区二区| 亚洲第一二三四区| 欧美日韩国产综合视频在线观看| 自拍偷拍国产精品| 色综合网色综合| 中文在线资源观看网站视频免费不卡| 麻豆91精品91久久久的内涵| 日韩一区二区三区高清免费看看| 日韩中文欧美在线| 欧美一区二区三区的| 日韩av电影天堂| 欧美一区二区三区思思人| 日日夜夜免费精品视频| 欧美一区二区视频在线观看 | 成人在线视频一区| 久久视频一区二区| 国产精品99久久久久久似苏梦涵 | 最好看的中文字幕久久| 99精品视频在线观看| 国产精品美女久久久久久| 99re6这里只有精品视频在线观看| 国产精品护士白丝一区av| 91亚洲精品乱码久久久久久蜜桃| 亚洲另类色综合网站| 在线观看不卡视频| 日韩高清在线一区| 26uuu国产电影一区二区| 国产不卡视频一区| 一级特黄大欧美久久久| 91精品中文字幕一区二区三区| 美脚の诱脚舐め脚责91| 国产三级三级三级精品8ⅰ区| 成人教育av在线| 亚洲人成网站精品片在线观看| 在线观看91视频| 奇米综合一区二区三区精品视频| 欧美成人综合网站| 成人精品gif动图一区| 亚洲电影一级黄| 久久久久久亚洲综合| 91福利区一区二区三区| 免费成人在线视频观看| 国产日韩视频一区二区三区| 91社区在线播放| 免费成人性网站| 综合久久给合久久狠狠狠97色| 欧美日韩国产色站一区二区三区| 韩国av一区二区三区| 樱桃视频在线观看一区| 欧美大白屁股肥臀xxxxxx| av中文字幕不卡| 首页国产欧美日韩丝袜| 国产精品美女久久久久aⅴ国产馆| 欧美综合天天夜夜久久| 国产精品一二三在| 日本在线不卡一区| 欧美国产日产图区| 91麻豆精品国产自产在线观看一区| 国产成人av影院| 五月婷婷另类国产| 中文字幕日韩av资源站| 精品捆绑美女sm三区| 欧美日韩精品一区视频| 99久久免费国产| 九一九一国产精品| 亚洲第一福利一区| 亚洲精品中文字幕在线观看| 久久先锋影音av鲁色资源网| 欧美日韩一级片网站| 97超碰欧美中文字幕| 国产精品538一区二区在线| 日韩av中文在线观看| 一区二区三区av电影| 国产精品网站在线观看| 久久伊人蜜桃av一区二区| 欧美人xxxx| 欧美久久一区二区| 91久久人澡人人添人人爽欧美| 国产91精品免费| 国产一区二区三区免费在线观看| 青青草91视频| 日韩精品电影一区亚洲| 午夜电影久久久| 亚洲国产欧美在线人成| 一区二区三区欧美久久| 中文字幕av在线一区二区三区| 久久精子c满五个校花| 日韩三级视频在线观看| 日韩欧美综合在线| 欧美一级在线观看| 欧美一区二区福利视频| 制服视频三区第一页精品| 欧美日韩国产三级| 欧美精品乱码久久久久久按摩| 欧美日韩精品欧美日韩精品一| 91美女在线观看| 91视频在线看| 欧洲色大大久久| 欧美肥胖老妇做爰| 777a∨成人精品桃花网| 制服丝袜亚洲播放| 欧美一区二区免费观在线| 日韩午夜激情视频| 欧美成人猛片aaaaaaa| 久久综合九色综合欧美亚洲| 久久久夜色精品亚洲| 中文字幕av资源一区| 亚洲欧美aⅴ...| 午夜精品一区二区三区免费视频| 天天影视涩香欲综合网| 久久激情综合网| 成人一级片在线观看| 99re8在线精品视频免费播放| 91成人在线精品| 欧美一级高清片在线观看| 亚洲精品一区二区三区精华液 | 一本一道久久a久久精品| 91视频在线观看免费| 欧日韩精品视频| 91精品国产一区二区三区 | 欧美网站大全在线观看| 欧美喷水一区二区| 精品国产一区二区三区av性色| 久久久久国色av免费看影院| 国产精品第一页第二页第三页| 亚洲精品va在线观看| 日本网站在线观看一区二区三区| 久久不见久久见免费视频7| 丁香桃色午夜亚洲一区二区三区| 91网站在线播放| 日韩一区二区三区在线观看| 国产女人aaa级久久久级| 亚洲与欧洲av电影| 国产在线精品免费| 日本高清不卡在线观看| www精品美女久久久tv| 成人欧美一区二区三区小说 | av毛片久久久久**hd| 欧美精品一级二级三级| 国产午夜精品一区二区三区嫩草| 亚洲啪啪综合av一区二区三区| 毛片av一区二区三区| 91久久人澡人人添人人爽欧美| 精品黑人一区二区三区久久| 亚洲精品伦理在线| 国产一区二区三区美女| 欧美日韩精品欧美日韩精品一| 国产精品欧美一区二区三区| 日本伊人色综合网| 91精品办公室少妇高潮对白| 久久久亚洲午夜电影| 欧美aaa在线| 欧美日韩另类一区| 日韩毛片精品高清免费| 国产一区二区三区免费| 欧美一卡二卡在线| 亚洲国产成人精品视频| 国产99久久久久久免费看农村| 日韩免费性生活视频播放| 天堂蜜桃91精品| 91国产福利在线| 中文字幕亚洲精品在线观看| 国产成人精品三级| 2021久久国产精品不只是精品| 日本在线不卡视频一二三区| 在线一区二区三区四区| 亚洲日韩欧美一区二区在线| 处破女av一区二区| 欧美韩国日本综合| 风间由美一区二区三区在线观看| 精品日韩99亚洲| 九九视频精品免费| 精品国产制服丝袜高跟| 麻豆精品蜜桃视频网站| 精品日韩在线一区| 国产一区视频网站| 亚洲国产精品精华液2区45| 国产**成人网毛片九色|