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

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

?? syntax.cpp

?? Cool語言編譯器
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
			{
				// 變量錯誤

				return Error;
			}

			// 檢查賦值號右側表達式
			char Exp[MaxY];
			GetMid(strLine, Pos + 2, strlen(strLine) - 1, Exp);
			ClearBlankInside(Exp);

			if (!ExpressionOK(Exp))
			{
				// 表達式錯誤

				return ErrorExpression;
			}
		}
		else
		{
			// 未知語句類型

			return ErrorSyntax;
		}
	}

	// 返回無錯誤
	return NoError;
}

bool VarOK(const char Var[MaxY])
{
	// 檢查變量名

	if (strchr(Var, '('))
	{
		// 當前字符串是數組

		// 取數組名
		char VarMain[MaxY];
		GetPart(Var, 1, '(', VarMain);

		if (!VarOK(VarMain))
		{
			// 數組名非法

			Error = ErrorVar;
			return false;
		}

		// 取數組下標
		GetPart(Var, 2, '(', VarMain);
		VarMain[strlen(VarMain) - 1] = '\0';

		if (VarMain[strlen(VarMain) - 1] == ',')
		{
			// 有多余的逗號

			Error = ErrorUnwantedComma;
			return false;
		}

		// 存儲各下標字符串
		char Range[MaxY];

		// 取第一個下標字符串
		int i = 1;
		GetPart(VarMain, i, ',', Range);
		ClearBlankInside(Range);

		while (Range[0] != '\0')
		{
			if (!ExpressionOK(Range))
			{
				// 下標表達式出錯

				Error = ErrorExpression;
				return false;
			}

			// 取下一個下標
			i++;
			GetPart(VarMain, i, ',', Range);
			ClearBlankInside(Range);
		}

		if (i == 1)
		{
			// 缺少下標

			Error = ErrorMissingRange;
			return false;
		}

		return true;
	}

	if (Var[0] == '\0')
	{
		// 變量為空

		Error = ErrorMissingVar;
		return false;
	}
	else if (strlen(Var) <= MaxLenOfVar)
	{
		// 長度小于最大允許長度

		if (isalpha(Var[0]))
		{
			for(int i = 1; i < strlen(Var); i++)
			{
				if (!isdigit(Var[i]) && !isalpha(Var[i]) && Var[i] != '_')
				{
					// 非字母,非數字,非下劃線

					Error = ErrorVar;
					return false;
				}
			}

			// 正確
			return true;
		}
		else
		{
			// 首字符必須是字母

			Error = ErrorVar;
			return false;
		}
	}
	else
	{
		// 超過允許長度

		Error = ErrorVar;
		return false;
	}
}

bool BooleanOK(const char Exp[MaxY])
{
	// 檢查布爾表達式是否正確,供外部調用

	int Seat = 0;
	bool Result = BoolOK(Exp, Seat);
	return Result && Seat >= strlen(Exp);
}

bool BoolOK(const char Exp[MaxY], int &Seat)
{
	// 檢查布爾表達式是否正確,內部使用

	// 測試OR表達式
	if (!OROK(Exp, Seat))
	{
		// 第一個OR表達式出錯,返回

		return false;
	}

	while (Exp[Seat] == '|')
	{
		// 繼續檢查后面的

		Seat++;
		if (!OROK(Exp, Seat))
		{
			// 表達式錯誤,返回

			return false;
		}
	}

	// 正確,返回
	return true;
}

bool OROK(const char Exp[MaxY], int &Seat)
{
	// 檢查OR表達式是否正確

	// 檢查第一個AND表達式
	if (!ANDOK(Exp, Seat))
	{
		// 表達式錯誤,返回

		return false;
	}

	while (Exp[Seat] == '&')
	{
		// 繼續檢查后面的

		Seat++;
		if (!ANDOK(Exp, Seat))
		{
			return false;
		}
	}

	// 正確,返回
	return true;
}

bool ANDOK(const char Exp[MaxY], int &Seat)
{
	// 檢查AND表達式是否正確

	if (Exp[Seat] == '(')
	{
		// 一個新的布爾表達式開始

		Seat++;

		if (!BoolOK(Exp, Seat))
		{
			// 表達式錯誤

			return false;
		}

		if (Exp[Seat] != ')')
		{
			// 缺少括號匹配

			return false;
		}

		// 正確,返回
		return true;
	}
	else if (Exp[Seat] == '~')
	{
		// 檢查非表達式

		Seat++;

		if (!ANDOK(Exp, Seat))
		{
			// 表達式錯誤,返回

			return false;
		}

		// 正確,返回
		return true;
	}
	else
	{
		// 檢查元表達式

		// 取左側表達式
		char Word[MaxY] = "";
		while (!strchr("<>!=&|", Exp[Seat]))
		{
			strcat(Word, " ");
			Word[strlen(Word) - 1] = Exp[Seat];
			Seat++;
		}

		if (!ExpressionOK(Word))
		{
			// 左側表達式錯誤

			return false;
		}

		// 取邏輯運算符
		char Operation[3] = "";
		while (Seat < strlen(Exp) && strchr("<>!=", Exp[Seat]))
		{
			strcat(Operation, " ");
			Operation[strlen(Operation) - 1] = Exp[Seat];
			Seat++;
		}

		if (Operation[0] == '\0')
		{
			// 無運算符,正確返回

			return true;
		}

		// 取右側表達式
		Word[0] = '\0';
		while (!strchr("<>!=&|", Exp[Seat]))
		{
			strcat(Word, " ");
			Word[strlen(Word) - 1] = Exp[Seat];
			Seat++;
		}

		if (!ExpressionOK(Word))
		{
			// 右側表達式錯誤

			return false;
		}

		if (strcmp(Operation, ">") != 0 &&
			strcmp(Operation, "<") != 0 &&
			strcmp(Operation, "=") != 0 &&
			strcmp(Operation, ">=") != 0 &&
			strcmp(Operation, "<=") != 0 &&
			strcmp(Operation, "<>") != 0)
		{
			// 操作符錯誤

			return false;
		}

		// 正確,返回
		return true;
	}
}

bool FactorOK(const char strExp[MaxY], int &Seat)
{
	// 計算因式的值

	if (strExp[Seat] == '(')
	{
		// 因式中含有括號,開始表達式處理

		// 越過左括號位
		Seat++;

		// 返回表達式的值
		if (!ExpressOK(strExp, Seat))
		{
			return false;
		}

		if (Seat >= strlen(strExp) || strExp[Seat] != ')')
		{
			return false;
		}

		// 越過右括號位
		Seat++;

		// 返回因式的值
		return true;
	}
	else if (strExp[Seat] == '+' || strExp[Seat] == '-')
	{
		// 是負號

		if (Seat > 0 && (strchr("+-", strExp[Seat - 1])))
		{
			return false;
		}

		// 越過負號位
		Seat++;

		// 返回因式的相反數
		bool OK = FactorOK(strExp, Seat);

		return OK;
	}
	else
	{
		// 處理普通因式

		int i = Seat;
		char Chr = strExp[i];

		while (i < strlen(strExp) && (isalpha(Chr) || isdigit(Chr) || Chr == '.'))
		{
			// 是字母、數字或小數點

			i++;

			Chr = strExp[i];
		}

		// 取變量或數字
		char strTemp[MaxY] = "";
		GetMid(strExp, Seat, i - 1, strTemp);

		Seat = i;

		if (strTemp[0] == '\0')
		{
			// 表達式錯誤

			return false;
		}

		double Temp;

		if (strcmp(strTemp, "RND") == 0 ||
			strcmp(strTemp, "INT") == 0 ||
			strcmp(strTemp, "SQR") == 0)
		{
			// 是RND、INT或SQR

			// 取參數
			char strPara[MaxY];
			int End;
			if (!GetParaStr(strExp, Seat, strPara, End))
			{
				// 缺少參數

				return false;
			}

			Seat = End;

			// 檢查參數表達式
			ClearBlankInside(strPara);

			return ExpressionOK(strPara);
		}
		else if (strcmp(strTemp, "PI") == 0)
		{
			// 正確,返回

			return true;
		}
		else if (IsNumber(strTemp, Temp))
		{
			// 正確,返回

			return true;
		}
		else if (strExp[Seat] != '(')
		{
			// 簡單變量

			return VarOK(strTemp);
		}
		else if (strExp[Seat] == '(')
		{
			// 數組變量

			// 取下標字符串
			char strPara[MaxY];
			int New;
			if (!GetParaStr(strExp, Seat, strPara, New))
			{
				// 下標字符串錯誤

				return false;
			}
			Seat = New;

			if (strPara[strlen(strPara) - 1] == ',')
			{
				// 多余逗號

				return false;
			}

			// 末尾添加逗號,方便分離各下標
			strcat(strPara, ",");

			// 存儲各下標表達式
			char strExp[MaxY];

			// 取第一個下標
			int i = 1;
			GetPart(strPara, 1, ',', strExp);
			ClearBlankInside(strExp);

			while (strExp[0] != '\0')
			{
				if (!ExpressionOK(strExp))
				{
					// 下標表達式錯誤

					return false;
				}

				// 取下一個下標
				i++;
				GetPart(strPara, i, ',', strExp);
				ClearBlankInside(strExp);
			}

			// 正確,返回
			return true;
		}
	}

	return true;
}

bool TermOK(const char strExp[MaxY], int &Seat)
{
	// 計算項的值

	if (!FactorOK(strExp, Seat))
	{
		// 有錯誤,返回

		return false;
	}

	bool OK;

	while (Seat < strlen(strExp) &&
			(strExp[Seat] == '*' || strExp[Seat] == '/' || strExp[Seat] == '%'))
	{
		// 還有因式需要計算

		Seat++;
		switch (strExp[Seat - 1])
		{
		case '*':
		case '/':
		case '%':
			// 符號正確

			OK = FactorOK(strExp, Seat);
			break;
		default:
			return false;
		}

		if (!OK)
		{
			return false;
		}
	}

	// 返回項的值
	return true;
}

bool ExpressOK(const char strExp[MaxY], int &Seat)
{
	// 計算表達式的值

	if (!TermOK(strExp, Seat))
	{
		// 有錯誤,返回
		return false;
	}

	bool OK;

	while (Seat < strlen(strExp) &&
			(strExp[Seat] == '+' || strExp[Seat] == '-'))
	{
		// 還有項需要計算

		Seat++;
		switch (strExp[Seat - 1])
		{
		case '+':
		case '-':
			// 減號

			OK = TermOK(strExp, Seat);
			break;
		default:
			return false;
		}

		if (!OK)
		{
			return false;
		}
	}

	// 返回表達式的值
	return true;
}

bool ExpressionOK(const char strExp[MaxY])
{
	// 檢查表達式是否正確,外部調用

	int SeatOut = 0;
	bool OK = ExpressOK(strExp, SeatOut);
	return OK && SeatOut >= strlen(strExp);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产亚洲va综合人人澡精品 | 国产二区国产一区在线观看| 精品亚洲成a人| 91首页免费视频| 日韩欧美国产一区二区在线播放 | 久久久亚洲精品石原莉奈| 亚洲女人小视频在线观看| 加勒比av一区二区| 欧美日韩一本到| 亚洲天堂2016| 国产一区在线视频| 91精品国产乱码| 午夜久久久久久| 在线看国产一区| 亚洲男人都懂的| 国产毛片一区二区| 欧美不卡一区二区三区| 日韩福利电影在线观看| 欧美日韩一卡二卡| 一区二区三区在线观看动漫| www.视频一区| 国产精品乱码人人做人人爱| 黑人精品欧美一区二区蜜桃| 91麻豆精品国产91久久久更新时间| 亚洲日韩欧美一区二区在线| 成人午夜在线免费| 国产精品污网站| 成人黄色软件下载| 国产欧美日韩三级| 国产精品18久久久久久久久| 欧美精品一区二区三区视频| 精品在线免费观看| 日韩精品专区在线影院观看| 丝袜美腿一区二区三区| 在线不卡中文字幕播放| 午夜伊人狠狠久久| 9191精品国产综合久久久久久| 亚洲综合在线视频| 在线观看一区不卡| 天天综合网天天综合色| 欧美一区二区精品| 国内精品国产三级国产a久久| 欧美精品一区二区三区视频| 国产电影精品久久禁18| 国产精品久久99| 91丨九色丨黑人外教| 亚洲一区在线观看视频| 91精品国产综合久久精品| 韩日av一区二区| 国产精品免费aⅴ片在线观看| 色乱码一区二区三区88| 亚洲国产精品视频| 日韩精品一区二区三区视频播放 | 亚洲午夜精品在线| 欧美日本国产视频| 久草这里只有精品视频| 国产精品情趣视频| 91国内精品野花午夜精品| 亚洲午夜av在线| 欧美成人vps| 成人黄色软件下载| 亚洲丶国产丶欧美一区二区三区| 91麻豆精品国产91久久久久久 | 亚洲一区二区欧美激情| 日韩一二在线观看| 成人免费视频国产在线观看| 亚洲啪啪综合av一区二区三区| 91精品国产综合久久久蜜臀图片| 国产一区二区在线视频| 亚洲精品久久久久久国产精华液| 欧美一区二区在线观看| 床上的激情91.| 午夜精品福利久久久| 久久免费视频色| 欧美中文字幕一区二区三区亚洲| 美腿丝袜一区二区三区| 国产精品私人自拍| 91精品国产综合久久久久| jlzzjlzz国产精品久久| 蜜臀va亚洲va欧美va天堂| 亚洲图片激情小说| 欧美xxxx老人做受| 色狠狠综合天天综合综合| 精品一二线国产| 午夜精品福利一区二区三区av| 中文字幕乱码一区二区免费| 欧美人牲a欧美精品| 99re这里只有精品首页| 精品一二三四在线| 亚洲444eee在线观看| 亚洲免费成人av| 国产色91在线| 久久午夜老司机| 日韩欧美的一区| 欧美猛男男办公室激情| 色婷婷av一区二区三区gif | 美腿丝袜一区二区三区| 亚洲va韩国va欧美va| 国产肉丝袜一区二区| 欧美少妇bbb| 一本色道综合亚洲| av在线播放成人| 成人自拍视频在线观看| 国产精品18久久久久久久久久久久 | 久久久青草青青国产亚洲免观| 91精品在线免费观看| 欧美日韩一卡二卡| 欧美日韩精品专区| 欧美日韩在线综合| 欧美三级资源在线| 欧美日韩在线免费视频| 欧美在线视频日韩| 欧美三级资源在线| 在线电影一区二区三区| 欧美一区二区观看视频| 91精品国产综合久久精品| 在线不卡中文字幕播放| 日韩一区二区电影网| 精品日产卡一卡二卡麻豆| 精品少妇一区二区三区视频免付费 | 国产精品视频看| 国产精品网站在线播放| 自拍偷拍亚洲欧美日韩| 成人免费在线播放视频| 国产精品久久看| 亚洲精品菠萝久久久久久久| 亚洲成人一区二区| 日韩高清不卡一区二区三区| 久久99精品久久久久婷婷| 国产一区二区精品在线观看| 国产成人高清在线| 97国产一区二区| 欧美熟乱第一页| 日韩精品一区国产麻豆| 2021中文字幕一区亚洲| 中文字幕av在线一区二区三区| 综合在线观看色| 亚洲h动漫在线| 久久99日本精品| 波多野结衣在线一区| 欧美性生活一区| 精品久久久久99| 国产欧美一区二区精品性| 最新久久zyz资源站| 婷婷中文字幕综合| 国产成人h网站| 欧美喷潮久久久xxxxx| 久久精子c满五个校花| 亚洲黄色片在线观看| 国产一区二区精品久久| www.性欧美| 欧美一区二区三区人| 一区精品在线播放| 日韩精品电影一区亚洲| 国产成人精品免费| 制服丝袜一区二区三区| 中文字幕在线不卡视频| 卡一卡二国产精品| 欧洲日韩一区二区三区| 国产亚洲成aⅴ人片在线观看| 亚洲国产成人tv| 不卡的av电影在线观看| 精品不卡在线视频| 性欧美大战久久久久久久久| 成人精品一区二区三区四区| 欧美一区二区黄| 亚洲国产一区二区在线播放| 成人三级伦理片| 久久久综合网站| 蜜桃av一区二区| 欧美另类z0zxhd电影| 亚洲欧洲韩国日本视频| 国内精品伊人久久久久av一坑| 欧美日韩国产小视频在线观看| 中文字幕久久午夜不卡| 免费观看久久久4p| 欧美日韩亚洲综合在线| 国产精品久久久久影院色老大| 韩国精品免费视频| 91精品国产欧美日韩| 婷婷综合五月天| 欧美日韩电影在线| 亚洲精品你懂的| 色婷婷亚洲综合| 亚洲男人的天堂网| av电影在线不卡| 国产精品视频一二三| 成人性生交大片免费看视频在线| 久久这里只有精品首页| 蜜桃视频一区二区三区在线观看| 欧美日韩www| 五月激情综合婷婷| 欧美日韩小视频| 日韩影院精彩在线| 91精品国产色综合久久ai换脸| 日韩经典中文字幕一区| 91精品国产欧美一区二区成人| 日韩高清国产一区在线| 日韩精品自拍偷拍| 国产在线精品一区二区不卡了|