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

📄 fcr.cpp

📁 我开发了一个基于MFC的语言翻译软件
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			if(memory[iAddress-1].dNumber == memory[iAddress].dNumber)
				memory[iAddress-1].iNumber=1;
			else memory[iAddress-1].iNumber=0;
			iAddress--;
			iCode++;
			break;
		case OP_NOTEQUALI:			//整数不等
			if(memory[iAddress-1].iNumber != memory[iAddress].iNumber)
				memory[iAddress-1].iNumber=1;
			else memory[iAddress-1].iNumber=0;
			iAddress--;
			iCode++;
			break;
		case OP_NOTEQUALD:			//实数不等
			if(memory[iAddress-1].dNumber != memory[iAddress].dNumber)
				memory[iAddress-1].iNumber=1;
			else memory[iAddress-1].iNumber=0;
			iAddress--;
			iCode++;
			break;
		case OP_GREATI:					//整数大于
			if(memory[iAddress-1].iNumber > memory[iAddress].iNumber)
				memory[iAddress-1].iNumber=1;
			else memory[iAddress-1].iNumber=0;
			iAddress--;
			iCode++;
			break;
		case OP_GREATD:					//实数大于
			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:		//整数大于等于
			if(memory[iAddress-1].iNumber >= memory[iAddress].iNumber)
				memory[iAddress-1].iNumber=1;
			else memory[iAddress-1].iNumber=0;
			iAddress--;
			iCode++;
			break;
		case OP_GREATEQUALD:		//实数大于等于
			if(memory[iAddress-1].dNumber >= memory[iAddress].dNumber)
				memory[iAddress-1].iNumber=1;
			else memory[iAddress-1].iNumber=0;
			iAddress--;
			iCode++;
			break;
		case OP_LESSI:					//整数小于
			if(memory[iAddress-1].iNumber < memory[iAddress].iNumber)
				memory[iAddress-1].iNumber=1;
			else memory[iAddress-1].iNumber=0;
			iAddress--;
			iCode++;
			break;
		case OP_LESSD:					//实数小于
			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:			//整数小于等于
			if(memory[iAddress-1].iNumber <= memory[iAddress].iNumber)
				memory[iAddress-1].iNumber=1;
			else memory[iAddress-1].iNumber=0;
			iAddress--;
			iCode++;
			break;
		case OP_LESSEQUALD:			//实数小于等于
			if(memory[iAddress-1].dNumber <= memory[iAddress].dNumber)
				memory[iAddress-1].iNumber=1;
			else memory[iAddress-1].iNumber=0;
			iAddress--;
			iCode++;
			break;
		case OP_RETURNI:				//整型函数返回
			iTemp=memory[iAddress].iNumber;//保留返回值
			iAddress=memory[iBase+1].iNumber+1	//恢复中间代码指针
				-code[iCode].sd.iNumber;		//回收参数传递时参数占用的虚内存
			iCode		=memory[iBase+2].iNumber+1;	//恢复栈顶指针
			iBase		=memory[iBase].iNumber;			//恢复原基地址
			memory[iAddress].iNumber=iTemp;
			break;
		case OP_RETURND:				//实型函数返回
			dTemp=memory[iAddress].dNumber;//保留返回值
			iAddress=memory[iBase+1].iNumber+1	//恢复中间代码指针
				-code[iCode].sd.iNumber;		//回收参数传递时参数占用的虚内存
			iCode		=memory[iBase+2].iNumber+1;	//恢复栈顶指针
			iBase		=memory[iBase].iNumber;			//恢复原基地址
			memory[iAddress].dNumber=dTemp;
			break;
		case OP_INPUTI:					//输入整型值
			tElapse+=clock()-tStart;
			memory[iBase+3+code[iCode].sd.iNumber].iNumber=InputInt();
			tStart=clock();
			iCode++;
			break;
		case OP_INPUTD:					//输入实型值
			tElapse+=clock()-tStart;
			memory[iBase+3+code[iCode].sd.iNumber].dNumber=InputDouble();
			tStart=clock();
			iCode++;
			break;
		case OP_LOADVARI:				//导入整型变量
			iAddress++;
			if(!TestAddress(iAddress))
				return FALSE;
			memory[iAddress].iNumber=memory[iBase+3+code[iCode].sd.iNumber].iNumber;
			iCode++;
			break;
		case OP_LOADVARD:				//导入实型变量
			iAddress++;
			if(!TestAddress(iAddress))
				return FALSE;
			memory[iAddress].dNumber=memory[iBase+3+code[iCode].sd.iNumber].dNumber;
			iCode++;
			break;
		case OP_SAVEI:					//保存整型变量值
			memory[iBase+3+code[iCode].sd.iNumber].iNumber=memory[iAddress].iNumber;
			iAddress--;
			iCode++;
			break;
		case OP_SAVED:					//保存实型变量值
			memory[iBase+3+code[iCode].sd.iNumber].dNumber=memory[iAddress].dNumber;
			iAddress--;
			iCode++;
			break;
		case OP_OUTPUTS:				//输出字符串
			Output(code[iCode].sd.string);
			iCode++;
			break;
		case OP_OUTPUTI:				//输出整数
			Output(memory[iAddress].iNumber);
			iAddress--;
			iCode++;
			break;
		case OP_OUTPUTD:				//输出实数
			Output(memory[iAddress].dNumber);
			iAddress--;
			iCode++;
			break;
		case OP_LOADCONSTI:			//导入整常数
			iAddress++;
			if(!TestAddress(iAddress))
				return FALSE;
			memory[iAddress].iNumber=code[iCode].sd.iNumber;
			iCode++;
			break;
		case OP_LOADCONSTD:			//导入实常数
			iAddress++;
			if(!TestAddress(iAddress))
				return FALSE;
			memory[iAddress].dNumber=code[iCode].sd.dNumber;
			iCode++;
			break;
		case OP_CHANGESIGNALI:	//整数变号
			memory[iAddress].iNumber= -memory[iAddress].iNumber;
			iCode++;
			break;
		case OP_CHANGESIGNALD:	//实数变号
			memory[iAddress].dNumber= -memory[iAddress].dNumber;
			iCode++;
			break;
		case OP_PLUSI:					//整数加
			memory[iAddress-1].iNumber+=memory[iAddress].iNumber;
			iAddress--;
			iCode++;
			break;
		case OP_PLUSD:					//实数加
			memory[iAddress-1].dNumber+=memory[iAddress].dNumber;
			iAddress--;
			iCode++;
			break;
		case OP_MINUSI:					//整数减
			memory[iAddress-1].iNumber-=memory[iAddress].iNumber;
			iAddress--;
			iCode++;
			break;
		case OP_MINUSD:					//实数减
			memory[iAddress-1].dNumber-=memory[iAddress].dNumber;
			iAddress--;
			iCode++;
			break;
		case OP_TIMESI:					//整数乘
			memory[iAddress-1].iNumber*=memory[iAddress].iNumber;
			iAddress--;
			iCode++;
			break;
		case OP_TIMESD:					//实数乘
			memory[iAddress-1].dNumber*=memory[iAddress].dNumber;
			iAddress--;
			iCode++;
			break;
		case OP_SLASHI:					//整数除
			if(!ZeroSlashMod(memory[iAddress].iNumber))//测试是否除数为0
				return FALSE;
			memory[iAddress-1].iNumber/=memory[iAddress].iNumber;
			iAddress--;
			iCode++;
			break;
		case OP_SLASHD:					//实数除
			if(!ZeroSlashMod(memory[iAddress].dNumber))//测试是否除数为0
				return FALSE;
			memory[iAddress-1].dNumber/=memory[iAddress].dNumber;
			iAddress--;
			iCode++;
			break;
		case OP_MOD:						//余
			if(!ZeroSlashMod(memory[iAddress].iNumber))
				return FALSE;
			memory[iAddress-1].iNumber%=memory[iAddress].iNumber;
			iAddress--;
			iCode++;
			break;
		case OP_PARAMTRANSI:		//传递整型参数
			memory[iBase+3+code[iCode].sd.iNumber].iNumber=
				memory[iBase+code[iCode].sd.iNumber-code[iCode].sd.nParam].iNumber;
			iCode++;
			break;
		case OP_PARAMTRANSD:		//传递实型参数
			memory[iBase+3+code[iCode].sd.iNumber].dNumber=
				memory[iBase+code[iCode].sd.iNumber-code[iCode].sd.nParam].dNumber;
			iCode++;
			break;
		default://由于定义的所有操作上边均已经实现,认为不可能到此default,故有以下处理
			Output("\r\n程序发生错误,请将此错误告知ZKF,以便进行修改,谢谢!\r\n");
			return FALSE;
		}
	}
EndInterpret:
	Output("\r\n程序执行用时 ");
	Output(tElapse+clock()-tStart);
	Output(" 毫秒\r\n");
	return TRUE;
}//end interpret

BOOL TestAddress(int iAddress)
{
	if(iAddress>=nMEMORY)
	{
		cout<<"\n地址溢出,程序停止执行!\n";
		return FALSE;
	}
	return TRUE;
}

BOOL ZeroSlashMod(int i)
{
	if(i==0)
	{
		cout<<"\n“/”或“%”的右操作数为0,程序停止执行!\n";
		return FALSE;
	}
	return TRUE;
}

BOOL ZeroSlashMod(double d)
{
	if(d==0.0)
	{
		cout<<"\n“/”或“%”的右操作数为0,程序停止执行!\n";
		return FALSE;
	}
	return TRUE;
}

BOOL ArraySubscript(int index,int length)
{
	if(index<0 || (length>=0 && index>=length))
	{
		cout<<"\n数组下标溢出,程序停止执行!\n";
		return FALSE;
	}
	return TRUE;
}

int InputInt(void)
{
	char line[128];
	int result,i;
	while(1)
	{
		cin.getline(line,128);
		for(i=0;line[i]==' ' || line[i]=='\t';i++);
		if(line[i]=='\0')continue;
		result=0;
		for(;line[i]>='0' && line[i]<='9';i++)
		{
			result*=10;
			result+=line[i]-'0';
		}
		for(;line[i]==' ' || line[i]=='\t';i++);
		if(line[i]=='\0')
		{
			return result;
		}
		cout<<"请输入一个整数: ";
	}
}

double InputDouble(void)
{
	char line[128];
	double result;
	int i;
	while(1)
	{
		cin.getline(line,128);
		for(i=0;line[i]==' ' || line[i]=='\t';i++);
		if(line[i]=='\0')continue;
		result=0;
		for(;line[i]>='0' && line[i]<='9';i++)
		{
			result*=10;
			result+=line[i]-'0';
		}
		if(line[i]=='.')
		{
			double l=0.1;
			for(i++;line[i]>='0' && line[i]<='9';i++)
			{
				result+=l*(line[i]-'0');
				l/=10;
			}
			for(;line[i]==' ' || line[i]=='\t';i++);
		}
		else
		{
			for(;line[i]==' ' || line[i]=='\t';i++);
		}
		if(line[i]=='\0')
		{
			return result;
		}
		cout<<"请输入一个实数: ";
	}
}

void Output(int i)
{
	cout<<i;
}

void Output(double d)
{
	cout<<d;
}

void Output(char string[])
{
	cout<<string;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -