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

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

?? fc-interpret.cpp

?? 編譯原理的一個課程設計
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include "stdafx.h"
#include "FC.h"
#include "FCDlg.h"
#include "FCInputDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

BOOL CFCDlg::TestAddress(int iAddress)
{
	if(iAddress>=nMEMORY)
	{
		Output("\r\n地址溢出,程序停止執(zhí)行!\r\n");
		MessageBeep(0);
		return FALSE;
	}
	return TRUE;
}

BOOL CFCDlg::ZeroSlashMod(int i)
{
	if(i==0)
	{
		Output("\r\n“/”或“%”的右操作數(shù)為0,程序停止執(zhí)行!\r\n");
		MessageBeep(0);
		return FALSE;
	}
	return TRUE;
}

BOOL CFCDlg::ZeroSlashMod(double d)
{
	if(d==0.0)
	{
		Output("\r\n“/”或“%”的右操作數(shù)為0,程序停止執(zhí)行!\r\n");
		MessageBeep(0);
		return FALSE;
	}
	return TRUE;
}

BOOL CFCDlg::ArraySubscript(int index,int length)
{
	if(index<0 || (length>=0 && index>=length))
	{
		Output("\r\n數(shù)組下標溢出,程序停止執(zhí)行!\r\n");
		MessageBeep(0);
		return FALSE;
	}
	return TRUE;
}

BOOL CFCDlg::ValideArray(void *pArray)
{
	if(pArray==NULL)
	{
		Output("\r\n無法分配數(shù)組空間,程序停止執(zhí)行!\r\n");
		MessageBeep(0);
		return FALSE;
	}
	return TRUE;
}

// CFCDlg 運行函數(shù)
BOOL CFCDlg::Interpret(void)
{
	const double m_iCode=0;//定義此變量只是為了屏蔽外部成員變量

	int i,n,iTemp;
	double dTemp;

	register int iBase=0;		//函數(shù)基地址
	register int iCode=0;		//代碼指針
	register int iAddress=0;	//地址指針
	ZMemory memory[nMEMORY];	//虛內(nèi)存

	register int iOp;			//指令條數(shù)計數(shù)
	BOOL bWarning=TRUE;			//是否對可能的死循環(huán)進行警告

	clock_t tStart,tElapse=0;
	tStart=clock();

	for(iOp=0;;iOp++)
	{
		if(iOp==17333 && bWarning)//17333只是表示173班33號,無其他意義
		{
			tElapse+=clock()-tStart;
			switch(MessageBox("\
程序可能進入死循環(huán),要中止解釋執(zhí)行嗎?\n\
按“是”中止解釋執(zhí)行,按“否”繼續(xù)解釋執(zhí)行\(zhòng)n\
按“取消”繼續(xù)解釋執(zhí)行并不再顯示此消息框",
				"FC 2.2",MB_YESNOCANCEL|MB_ICONQUESTION))
			{
			case IDYES:
				tStart=clock();
				goto EndInterpret;
				//此處無需break語句
			case IDCANCEL:
				bWarning=FALSE;
				//此處不填入break語句
			case IDNO:
				tStart=clock();
				iOp=0;
				break;
			}
		}
		switch(m_code[iCode].op)
		{
		case OP_AND:				//邏輯與
			if(memory[iAddress-1].iNumber!=0 && memory[iAddress].iNumber!=0)
				memory[iAddress-1].iNumber=1;
			else memory[iAddress-1].iNumber=0;
			iAddress--;
			iCode++;
			break;
		case OP_CALL:				//調(diào)用函數(shù)
			if(!TestAddress(iAddress+3))// +3 是因為下邊需要3單元虛內(nèi)存
				return FALSE;
			memory[iAddress+1].iNumber=iBase;	//保留原基地址
			memory[iAddress+2].iNumber=iAddress;//保留原棧頂指針
			memory[iAddress+3].iNumber=iCode;	//保留原中間代碼指針
			iBase=iAddress+1;
			iCode=m_code[iCode].sd.iNumber;
			iAddress+=m_code[iCode].sd.iNumber+3;
			iCode++;
			break;
		case OP_CHANGESIGNALD:		//實數(shù)變號
			memory[iAddress].dNumber= -memory[iAddress].dNumber;
			iCode++;
			break;
		case OP_CHANGESIGNALI:		//整數(shù)變號
			memory[iAddress].iNumber= -memory[iAddress].iNumber;
			iCode++;
			break;
		case OP_COPYD:				//復制棧頂實數(shù)
			iAddress++;
			if(!TestAddress(iAddress))
				return FALSE;
			memory[iAddress].dNumber=memory[iAddress-1].dNumber;
			iCode++;
			break;
		case OP_COPYI:				//復制棧頂整數(shù)
			iAddress++;
			if(!TestAddress(iAddress))
				return FALSE;
			memory[iAddress].iNumber=memory[iAddress-1].iNumber;
			iCode++;
			break;
		case OP_D2I:				//實數(shù)變整數(shù)
			memory[iAddress+m_code[iCode].sd.iNumber].iNumber=
				(int)memory[iAddress+m_code[iCode].sd.iNumber].dNumber;
			iCode++;
			break;
		case OP_DELARRAYD:			//刪除實數(shù)數(shù)組
			delete memory[iBase+3+m_code[iCode].sd.iNumber].dArray;
			iCode++;
			break;
		case OP_DELARRAYI:			//刪除整型數(shù)組
			delete memory[iBase+3+m_code[iCode].sd.iNumber].iArray;
			iCode++;
			break;
		case OP_DELETE:				//刪除棧頂數(shù)
			iAddress--;
			iCode++;
			break;
		case OP_EQUALD:				//實數(shù)相等
			if(memory[iAddress-1].dNumber == memory[iAddress].dNumber)
				memory[iAddress-1].iNumber=1;
			else memory[iAddress-1].iNumber=0;
			iAddress--;
			iCode++;
			break;
		case OP_EQUALI:				//整數(shù)相等
			if(memory[iAddress-1].iNumber == memory[iAddress].iNumber)
				memory[iAddress-1].iNumber=1;
			else memory[iAddress-1].iNumber=0;
			iAddress--;
			iCode++;
			break;
		case OP_EXIT:				//程序結束標志
			goto EndInterpret;
		case OP_GREATD:				//實數(shù)大于
			if(memory[iAddress-1].dNumber > memory[iAddress].dNumber)
				memory[iAddress-1].iNumber=1;
			else memory[iAddress-1].iNumber=0;
			iAddress--;
			iCode++;
			break;
		case OP_GREATEQUALD:		//實數(shù)大于等于
			if(memory[iAddress-1].dNumber >= memory[iAddress].dNumber)
				memory[iAddress-1].iNumber=1;
			else memory[iAddress-1].iNumber=0;
			iAddress--;
			iCode++;
			break;
		case OP_GREATEQUALI:		//整數(shù)大于等于
			if(memory[iAddress-1].iNumber >= memory[iAddress].iNumber)
				memory[iAddress-1].iNumber=1;
			else memory[iAddress-1].iNumber=0;
			iAddress--;
			iCode++;
			break;
		case OP_GREATI:				//整數(shù)大于
			if(memory[iAddress-1].iNumber > memory[iAddress].iNumber)
				memory[iAddress-1].iNumber=1;
			else memory[iAddress-1].iNumber=0;
			iAddress--;
			iCode++;
			break;
		case OP_I2D:				//整數(shù)變實數(shù)
			memory[iAddress+m_code[iCode].sd.iNumber].dNumber=
				(double)memory[iAddress+m_code[iCode].sd.iNumber].iNumber;
			iCode++;
			break;
		case OP_INPUTARRAYD:		//輸入實數(shù)數(shù)組
			iTemp=iBase+3+m_code[iCode].sd.iNumber;//數(shù)組頭位置
			i=memory[iAddress].iNumber;//數(shù)組下標
			if(!ArraySubscript(i,memory[iTemp].length))//下標檢查
				return FALSE;
			tElapse+=clock()-tStart;
			memory[iTemp].dArray[i]=InputDouble();
			tStart=clock();
			iAddress--;
			iCode++;
			break;
		case OP_INPUTARRAYI:		//輸入整數(shù)數(shù)組
			iTemp=iBase+3+m_code[iCode].sd.iNumber;//數(shù)組頭位置
			i=memory[iAddress].iNumber;//數(shù)組下標
			if(!ArraySubscript(i,memory[iTemp].length))//下標檢查
				return FALSE;
			tElapse+=clock()-tStart;
			memory[iTemp].iArray[i]=InputInt();
			tStart=clock();
			iAddress--;
			iCode++;
			break;
		case OP_INPUTD:				//輸入實型值
			tElapse+=clock()-tStart;
			memory[iBase+3+m_code[iCode].sd.iNumber].dNumber=InputDouble();
			tStart=clock();
			iCode++;
			break;
		case OP_INPUTI:				//輸入整型值
			tElapse+=clock()-tStart;
			memory[iBase+3+m_code[iCode].sd.iNumber].iNumber=InputInt();
			tStart=clock();
			iCode++;
			break;
		case OP_JUMP:				//無條件跳轉
			iCode=m_code[iCode].sd.iNumber;
			break;
		case OP_JUMPC:				//條件跳轉
			if(memory[iAddress].iNumber!=0)
				iCode=m_code[iCode].sd.iNumber;
			else iCode++;
			iAddress--;
			break;
		case OP_LESSD:				//實數(shù)小于
			if(memory[iAddress-1].dNumber < memory[iAddress].dNumber)
				memory[iAddress-1].iNumber=1;
			else memory[iAddress-1].iNumber=0;
			iAddress--;
			iCode++;
			break;
		case OP_LESSEQUALD:			//實數(shù)小于等于
			if(memory[iAddress-1].dNumber <= memory[iAddress].dNumber)
				memory[iAddress-1].iNumber=1;
			else memory[iAddress-1].iNumber=0;
			iAddress--;
			iCode++;
			break;
		case OP_LESSEQUALI:			//整數(shù)小于等于
			if(memory[iAddress-1].iNumber <= memory[iAddress].iNumber)
				memory[iAddress-1].iNumber=1;
			else memory[iAddress-1].iNumber=0;
			iAddress--;
			iCode++;
			break;
		case OP_LESSI:				//整數(shù)小于
			if(memory[iAddress-1].iNumber < memory[iAddress].iNumber)
				memory[iAddress-1].iNumber=1;
			else memory[iAddress-1].iNumber=0;
			iAddress--;
			iCode++;
			break;
		case OP_LOADARRAYD:			//導入實數(shù)數(shù)組
			iTemp=iBase+3+m_code[iCode].sd.iNumber;//數(shù)組頭位置

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美另类图片小说| 国产精品影视在线观看| 国产一区二区不卡在线| 99久久精品费精品国产一区二区| 7777精品伊人久久久大香线蕉完整版 | 免费国产亚洲视频| 99久久综合99久久综合网站| 日韩免费成人网| 亚洲一区二区偷拍精品| 成人午夜电影网站| 久久久久久久久蜜桃| 日本vs亚洲vs韩国一区三区| 色噜噜狠狠成人网p站| 久久精品免费在线观看| 美女精品自拍一二三四| 在线播放国产精品二区一二区四区| 中文字幕一区二区三区四区不卡| 精品在线播放免费| 日韩精品资源二区在线| 亚洲大片免费看| 在线观看不卡一区| 亚洲在线视频网站| 91高清在线观看| 蜜臀99久久精品久久久久久软件| 欧美色综合网站| 尤物在线观看一区| 91在线播放网址| 中文字幕一区三区| 成人18视频在线播放| 中国av一区二区三区| 国内成人免费视频| 国产亚洲综合色| 成人影视亚洲图片在线| 日本一区二区成人在线| 国产成人福利片| 国产精品初高中害羞小美女文| 高清视频一区二区| 国产精品欧美久久久久无广告| 国产成人日日夜夜| 国产精品欧美精品| 在线免费亚洲电影| 天天操天天干天天综合网| 8v天堂国产在线一区二区| 美腿丝袜亚洲色图| 国产午夜精品在线观看| 成人av综合一区| 玉米视频成人免费看| 欧美视频第二页| 久久疯狂做爰流白浆xx| 久久青草欧美一区二区三区| 国产精品1区2区| 亚洲免费观看高清完整版在线观看熊 | 6080午夜不卡| 久久99精品久久久| 久久精品无码一区二区三区| 成人少妇影院yyyy| 99国产精品久久久久久久久久久| 亚洲美女精品一区| 日韩一级大片在线| 国产69精品一区二区亚洲孕妇| 亚洲欧美偷拍三级| 91麻豆精品国产91久久久资源速度| 久久精品国产精品亚洲综合| 国产精品视频在线看| 在线视频欧美精品| 久久66热偷产精品| 亚洲精品伦理在线| 欧美v亚洲v综合ⅴ国产v| eeuss鲁片一区二区三区在线观看| 亚洲另类色综合网站| 日韩精品一区在线| 成人激情免费网站| 蜜臀av一区二区三区| 亚洲欧洲三级电影| 精品久久久久久久一区二区蜜臀| 97精品超碰一区二区三区| 久久不见久久见免费视频7| 一区二区三区波多野结衣在线观看| 日韩一区二区三区在线| www.亚洲国产| 狠狠色2019综合网| 午夜精品一区二区三区电影天堂| 国产欧美一区二区精品性色| 精品视频在线免费| 99久久综合国产精品| 韩国欧美国产一区| 日韩和欧美一区二区三区| 国产精品欧美一级免费| 精品久久久久久综合日本欧美| 欧美在线影院一区二区| 成人国产电影网| 国产精品资源在线| 久久电影网电视剧免费观看| 亚洲国产成人精品视频| 亚洲人成影院在线观看| 国产欧美一区二区精品婷婷| 欧美一卡2卡三卡4卡5免费| 在线视频你懂得一区| proumb性欧美在线观看| 国产成人啪免费观看软件| 国内精品嫩模私拍在线| 日本成人在线电影网| 亚洲成人第一页| 亚洲黄色片在线观看| 有码一区二区三区| 亚洲女女做受ⅹxx高潮| 国产精品国产精品国产专区不片 | 综合自拍亚洲综合图不卡区| 久久精品人人做人人综合 | 亚洲男人的天堂av| 亚洲视频一区在线| 亚洲日本成人在线观看| 国产麻豆精品95视频| 蜜臀久久99精品久久久画质超高清| 午夜精品福利视频网站| 亚洲va欧美va天堂v国产综合| 综合久久久久久| 亚洲女性喷水在线观看一区| 日韩毛片一二三区| 一级中文字幕一区二区| 亚洲午夜一区二区| 日日摸夜夜添夜夜添精品视频 | 一区二区三区日韩精品| 亚洲自拍偷拍av| 亚洲va欧美va国产va天堂影院| 午夜激情一区二区| 久久不见久久见中文字幕免费| 精品午夜久久福利影院| 国产精品小仙女| 99精品一区二区| 欧美日韩一级黄| 欧美电视剧在线观看完整版| 久久综合五月天婷婷伊人| 久久久久久久免费视频了| 1024国产精品| 性欧美疯狂xxxxbbbb| 久久国内精品自在自线400部| 国产精品99久久久久久久vr| 91丨九色丨蝌蚪丨老版| 欧美狂野另类xxxxoooo| 精品少妇一区二区三区在线播放| 国产欧美一区二区精品仙草咪| 樱桃视频在线观看一区| 日本sm残虐另类| 国产成人在线电影| 欧美午夜精品电影| 26uuu亚洲综合色| 亚洲欧美激情插| 激情综合色综合久久综合| hitomi一区二区三区精品| 欧美日韩一级片网站| 欧美经典三级视频一区二区三区| 成人免费一区二区三区视频| 五月天中文字幕一区二区| 粉嫩欧美一区二区三区高清影视| 色综合久久久久| 精品成人在线观看| 亚洲欧美一区二区久久| 精品一区二区三区蜜桃| 色婷婷狠狠综合| 久久精品综合网| 亚洲超丰满肉感bbw| 国产999精品久久久久久| 欧美人与性动xxxx| 一色桃子久久精品亚洲| 免费观看成人av| 精品视频一区二区不卡| 国产精品你懂的| 国精产品一区一区三区mba桃花 | 午夜电影网一区| 不卡欧美aaaaa| 337p日本欧洲亚洲大胆色噜噜| 亚洲成av人片在线| 91碰在线视频| 中文字幕欧美激情| 韩国精品在线观看| 欧美一区二区视频免费观看| 亚洲日本免费电影| 99热国产精品| 国产精品国产三级国产普通话蜜臀 | 亚洲成人黄色小说| 成人免费小视频| 高清成人免费视频| 亚洲精品在线免费观看视频| 日韩高清在线不卡| 欧美三级在线播放| 亚洲综合免费观看高清在线观看| 不卡的电影网站| 国产精品素人一区二区| 国产成人亚洲精品狼色在线| 精品欧美一区二区三区精品久久 | 欧美成人免费网站| 日韩国产高清影视| 777奇米四色成人影色区| 调教+趴+乳夹+国产+精品| 欧美性大战久久久| 视频一区二区中文字幕| 在线播放日韩导航| 伦理电影国产精品| 久久久99久久精品欧美|