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

📄 shixunview.cpp

📁 笨程序实现了编译原理中的编译程序
💻 CPP
📖 第 1 页 / 共 4 页
字号:
		}
	}
	else
	{
		if(!strcmp(result[flog].class0,"2")&&(!strcmp(result1[flog-1].value1,result1[flog].value1)))
		{
			bb++;
			itoa(bb,B,10);
			m_chucuo+=_T(B);
			m_chucuo+=_T(".语法出错的位置坐标为");
			m_chucuo+=_T("(");
			m_chucuo+=_T(result1[flog-1].value1);
			m_chucuo+=_T(",");
			m_chucuo+=_T(result1[flog-1].value2);
			m_chucuo+=_T("):");
			m_chucuo+=_T("产生式(变量-〉,<标志符><变量>|空)中缺少多余的,!\r\n");
			flog++;
			bianliang();
			return 0;
		}
		else
		{
			flog--;
			return 1;
		}
	}
		
}

//<赋值语句> →<变量> = <算术表达式><赋值语句2>
bool CShixunView::fuzhi()
{
	if(!strcmp(result[flog].class0,"2"))
	{
		strcpy(temp6,result[flog].value0);
		flog++;
		
		if(!strcmp(result[flog].value0,"=")&&(!strcmp(result1[flog-1].value1,result1[flog].value1)))
		{
			strcpy(temp5,"=");
			flog++;
			strcpy(temp7,suanshubds());
			if(suanshubds())
			{	
				strcpy(temp8," ");
				bb++;
				itoa(bb,B,10);
				m_chucuo+=_T(B);
				m_chucuo+=_T(".");
				m_chucuo+=_T("<");
				m_chucuo+=_T(temp5);
				m_chucuo+=_T(",");
				m_chucuo+=_T(temp6);
				m_chucuo+=_T(",");
				m_chucuo+=_T(temp7);
				m_chucuo+=_T(",");
				m_chucuo+=_T(temp8);
				m_chucuo+=_T("\t>\r\n");
				flog++;
				return fuzhi2();
			}
			else
			{
				flog++;
				fuzhi2();
				return 0;
			}
		}
		else
		{
			bb++;
			itoa(bb,B,10);
			m_chucuo+=_T(B);
			m_chucuo+=_T(".语法出错的位置坐标为");
			m_chucuo+=_T("(");
			m_chucuo+=_T(result1[flog-1].value1);
			m_chucuo+=_T(",");
			m_chucuo+=_T(result1[flog-1].value2);
			m_chucuo+=_T("):");
			m_chucuo+=_T("产生式(<赋值语句> →<变量> = <算术表达式><赋值语句2>)中缺少=!\r\n");	
			suanshubds();
			flog++;
			fuzhi2();
			return 0;
		}
	}
	else
	{
		if(!strcmp(result[flog].class0,"6")&&(!strcmp(result1[flog-1].value1,result1[flog].value1)))
		{
			bb++;
			itoa(bb,B,10);
			m_chucuo+=_T(B);
			m_chucuo+=_T(".语法出错的位置坐标为");
			m_chucuo+=_T("(");
			m_chucuo+=_T(result1[flog-1].value1);
			m_chucuo+=_T(",");
			m_chucuo+=_T(result1[flog-1].value2);
			m_chucuo+=_T("):");
			m_chucuo+=_T("产生式(<赋值语句> →<变量> = <算术表达式><赋值语句2>)中左边必须是变量!\r\n");	
			flog++;
			suanshubds();
			flog++;
			fuzhi2();
			return 0;
		}
		else
		{
			suanshubds();
			flog++;
			fuzhi2();
			return 0;
		}
	}
}
//<赋值语句2> →;<语句><赋值语句2>|;
bool CShixunView::fuzhi2()
{
	if(!strcmp(result[flog].value0,";"))
	{
		flog++;
		if(!strcmp(result[flog].class0,"2"))
		{
			return fuzhi();
		}
		else if(!strcmp(result[flog].value0,"if"))
		{
			return tiaojian();
		}
		else
		{
			flog--;
			return 1;
		}
	}
	else
	{
		bb++;
		itoa(bb,B,10);
		m_chucuo+=_T(B);
		m_chucuo+=_T(".语法出错的位置坐标为");
		m_chucuo+=_T("(");
		m_chucuo+=_T(result1[flog-1].value1);
		m_chucuo+=_T(",");
		m_chucuo+=_T(result1[flog-1].value2);
		m_chucuo+=_T("):");
		m_chucuo+=_T("产生式(<赋值语句2> →;<语句><赋值语句2>|;)中缺少;!\r\n");	
		if(!strcmp(result[flog].class0,"2"))
		{
			return fuzhi();
		}
		else if(!strcmp(result[flog].value0,"if"))
		{
			return tiaojian();
		}
		flog--;
		return 0;
	}
}
//<条件判断语句> → if <关系表达式> <语句><条件判断语句2>|
//								if <关系表达式> <语句> else <语句><条件判断语句2>
bool CShixunView::tiaojian()
{
	flog++;
		if(guanxibds()&&(!strcmp(result1[flog-1].value1,result1[flog].value1)))
		{
			flog++;
			if(yuju())
			{
				flog++;
				if(!strcmp(result[flog].value0,"else"))
				{
					flog++;
					return yuju();
				}
				else
				{
					flog--;
					return 1;
				}
			}
			else
			{
				flog++;
				if(!result[flog].value0,"else")
				{
					flog++;
					yuju();
					return 0;
				}
				flog--;
				return 0;
			}
		}
		else
		{
			flog++;
			yuju();
			flog++;
			if(!strcmp(result[flog].value0,"else"))
			{
				flog++;
				yuju();
			}
			else
			{
				tiaojian2();
			}
			return 0;
		}
		
}

//	<条件判断语句2> →;<语句><条件判断语句2>|空
bool CShixunView::tiaojian2()
{
	if(!strcmp(result[flog].value0,";"))
	{
		flog++;
		if(!strcmp(result[flog].class0,"2"))
		{
			return fuzhi();
		}
		else if(!strcmp(result[flog].value0,"if"))
		{
			return tiaojian();
		}
		else
		{
			flog--;
			return 1;
		}
	}
	else
	{
		bb++;
		itoa(bb,B,10);
		m_chucuo+=_T(B);
		m_chucuo+=_T(".语法出错的位置坐标为");
		m_chucuo+=_T("(");
		m_chucuo+=_T(result1[flog-1].value1);
		m_chucuo+=_T(",");
		m_chucuo+=_T(result1[flog-1].value2);
		m_chucuo+=_T("):");
		m_chucuo+=_T("产生式(<条件判断语句2> →;<语句><条件判断语句2>|空)中缺少;!\r\n");
		if(!strcmp(result[flog].class0,"2"))
		{
			return fuzhi();
		}
		else if(!strcmp(result[flog].value0,"if"))
		{
			return tiaojian();
		}
		flog--;
		return 0;
	}
}
//<算术表达式> →<项><算术表达式2>
char* CShixunView::suanshubds()
{
	strcpy(temp20,xiang());
	if(xiang())
	{
		flog++;
		return suanshubds2();

	}
	else
	{
		flog++;
		suanshubds2();
		return(temp20);
		//m_chucuo+=_T("产生式(<算术表达式> →<项><算术表达式2>)中<项>分析出错!\r\n");
		//return 0;
	}
	
}
//<算术表达式2> → + <项><算术表达式2>|-<项><算术表达式2>|空
char* CShixunView::suanshubds2()
{
	int f1=0,f2=0,f3=0,f4=0;
	f1=atoi(result1[flog-1].value1);
	f2=atoi(result1[flog].value1);
	f3=atoi(result1[flog-1].value2);
	f4=atoi(result1[flog].value2);
	
	char temp1[30];
	char temp3[30];
	char temp4[30];
	if((!strcmp(result[flog].value0,"+"))||(!strcmp(result[flog].value0,"-")))
	{
		
		strcpy(temp1,result[flog].value0);
		flog++;
		strcpy(temp3,xiang());
		if(xiang())
		{
			
			strcpy(temp4,newtemp());
			
			bb++;
			itoa(bb,B,10);
			m_chucuo+=_T(B);
			m_chucuo+=_T(".");
			m_chucuo+=_T("<");
			m_chucuo+=_T(temp1);
			m_chucuo+=_T(",");
			m_chucuo+=_T(temp20);
			m_chucuo+=_T(",");
			m_chucuo+=_T(temp3);
			m_chucuo+=_T(",");
			m_chucuo+=_T(temp4);
			m_chucuo+=_T("\t>\r\n");
			strcpy(temp20,temp4);
			flog++;
			return suanshubds2();
		}
		else
		{
			flog++;
			suanshubds();
			//return 0;
			return(temp20);
		}
	}
	else if((!strcmp(result[flog].value0,"("))
		||(!strcmp(result[flog].class0,"3"))
		||(!strcmp(result[flog].class0,"2"))
		&&(f1==f2)
		&&(f3==f4-1))
		{
			bb++;
			itoa(bb,B,10);
			m_chucuo+=_T(B);
			m_chucuo+=_T(".语法出错的位置坐标为");
			m_chucuo+=_T("(");
			m_chucuo+=_T(result1[flog-1].value1);
			m_chucuo+=_T(",");
			m_chucuo+=_T(result1[flog-1].value2);
			m_chucuo+=_T("):");
			m_chucuo+=_T("产生式(<算术表达式2> → + <项><算术表达式2>|-<项><算术表达式2>|空)中缺少算术运算符!\r\n");
			flog++;
			suanshubds2();
			//return 0;
			return(temp20);
		}
	else
	{
		flog--;
		return(temp20);
		//return 1;
	}
	
}
//<项>→<因式><项2>
char* CShixunView::xiang()
{
	strcpy(temp2,yinshi());		
	if(yinshi())
	{
		flog++;
		return xiang2();
		//strcpy(eplace,xiang2());
	}
	else
	{
		flog++;
		xiang2();
		return(temp2);
		//return 0;
		m_chucuo+=_T("产生式(<项>→<因式><项2>)中<因式>分析出错!\r\n");
	}
	
}
//<项2>→*<因式><项2>|/<因式><项2>|空
char* CShixunView::xiang2()
{
	int f5=0,f6=0,f7=0,f8=0;
	f5=atoi(result1[flog-1].value1);
	f6=atoi(result1[flog].value1);
	f7=atoi(result1[flog-1].value2);
	f8=atoi(result1[flog].value2);	
	char temp1[30];
	char temp3[30];
	char temp4[30];
	if((!strcmp(result[flog].value0,"*"))||(!strcmp(result[flog].value0,"/")))
	{		
		strcpy(temp1,result[flog].value0);
		flog++;
		strcpy(temp3,yinshi());
		if(!yinshi())
		{
			flog++;
			xiang2();
			//return 0;
			return(temp2);
		}
		else
		{
			
			strcpy(temp4,newtemp());
			
			bb++;
			itoa(bb,B,10);
			m_chucuo+=_T(B);
			m_chucuo+=_T(".");
			m_chucuo+=_T("<");
			m_chucuo+=_T(temp1);
			m_chucuo+=_T(",");
			m_chucuo+=_T(temp2);
			m_chucuo+=_T(",");
			m_chucuo+=_T(temp3);
			m_chucuo+=_T(",");
			m_chucuo+=_T(temp4);
			m_chucuo+=_T("\t>\r\n");
			strcpy(temp2,temp4);
			flog++;
			return xiang2();
		}
	}
	else if((!strcmp(result[flog].value0,"("))
			||(!strcmp(result[flog].class0,"3"))
			||(!strcmp(result[flog].class0,"2"))
			&&(!strcmp(result1[flog-1].value1,result1[flog].value1))
			&&(f7==f8-1))
	{
		yinshi();
		bb++;
		itoa(bb,B,10);
		m_chucuo+=_T(B);
		m_chucuo+=_T(".语法出错的位置坐标为");
		m_chucuo+=_T("(");
		m_chucuo+=_T(result1[flog-1].value1);
		m_chucuo+=_T(",");
		m_chucuo+=_T(result1[flog-1].value2);
		m_chucuo+=_T("):");
		m_chucuo+=_T("产生式(<项2>→*<因式><项2>|/<因式><项2>|空)中缺少算术运算符!\r\n");
		flog++;
		xiang2();
		//return 0;
		return(temp2);
	}
	else
	{
		flog--;
		//return 1;
		return(temp2);
	}
	
}
//<因式> → <变量> | <常数>|(<算术表达式>)
char* CShixunView::yinshi()
{
	char *fplace;
	fplace=(char*)malloc(30);
	strcpy(fplace," ");
	if((!strcmp(result[flog].class0,"2"))||(!strcmp(result[flog].class0,"3")))
	{
		strcpy(fplace,result[flog].value0);
		//return 1;
	}
	else if(!strcmp(result[flog].value0,"("))
	{
		flog++;
		if(suanshubds())
		{
			strcpy(fplace,suanshubds());
			flog++;
			if(strcmp(result[flog].value0,")")!=0)
			{
				bb++;
				itoa(bb,B,10);
				m_chucuo+=_T(B);
				m_chucuo+=_T(".语法出错的位置坐标为");
				m_chucuo+=_T("(");
				m_chucuo+=_T(result1[flog-1].value1);
				m_chucuo+=_T(",");
				m_chucuo+=_T(result1[flog-1].value2);
				m_chucuo+=_T("):");
				m_chucuo+=_T("产生式(<因式> → <变量> | <常数>|(<算术表达式>))中缺少)!\r\n");
				flog--;
				//return 0;
			}
			//return 1;
		}
		else
		{
			if(strcmp(result[flog].value0,")")!=0)
			{
				bb++;
				itoa(bb,B,10);
				m_chucuo+=_T(B);
				m_chucuo+=_T(".语法出错的位置坐标为");
				m_chucuo+=_T("(");
				m_chucuo+=_T(result1[flog-1].value1);
				m_chucuo+=_T(",");
				m_chucuo+=_T(result1[flog-1].value2);
				m_chucuo+=_T("):");
				m_chucuo+=_T("产生式(<因式> → <变量> | <常数>|(<算术表达式>))中缺少)!\r\n");
				//return 0;
			}
			flog++;
			//return 0;
		}
	}
	else//!=(
	{
		if((!strcmp(result[flog].class0,"2"))||(!strcmp(result[flog].class0,"3")))
		{
			bb++;
			itoa(bb,B,10);
			m_chucuo+=_T(B);
			m_chucuo+=_T(".语法出错的位置坐标为");
			m_chucuo+=_T("(");
			m_chucuo+=_T(result1[flog-1].value1);
			m_chucuo+=_T(",");
			m_chucuo+=_T(result1[flog-1].value2);
			m_chucuo+=_T("):");
			m_chucuo+=_T("产生式(<因式> → <变量> | <常数>|(<算术表达式>))中缺少(!\r\n");
			flog++;
			if(strcmp(result[flog].value0,")")!=0)
			{
				bb++;
				itoa(bb,B,10);
				m_chucuo+=_T(B);
				m_chucuo+=_T(".语法出错的位置坐标为");
				m_chucuo+=_T("(");
				m_chucuo+=_T(result1[flog-1].value1);
				m_chucuo+=_T(",");
				m_chucuo+=_T(result1[flog-1].value2);
				m_chucuo+=_T("):");
				m_chucuo+=_T("产生式(<因式> → <变量> | <常数>|(<算术表达式>))中缺少)!\r\n");
				flog--;
			}
		}
		else
		{
			if(!strcmp(result[flog].value0,")"))
			{
				flog++;
				bb++;
				itoa(bb,B,10);
				m_chucuo+=_T(B);
				m_chucuo+=_T(".语法出错的位置坐标为");
				m_chucuo+=_T("(");
				m_chucuo+=_T(result1[flog-1].value1);
				m_chucuo+=_T(",");
				m_chucuo+=_T(result1[flog-1].value2);
				m_chucuo+=_T("):");
				m_chucuo+=_T("产生式(<因式> → <变量> | <常数>|(<算术表达式>))中缺少(!\r\n");
			}
			bb++;
			itoa(bb,B,10);
			m_chucuo+=_T(B);
			m_chucuo+=_T(".语法出错的位置坐标为");
			m_chucuo+=_T("(");
			m_chucuo+=_T(result1[flog-1].value1);
			m_chucuo+=_T(",");
			m_chucuo+=_T(result1[flog-1].value2);
			m_chucuo+=_T("):");
			m_chucuo+=_T("产生式(<因式> → <变量> | <常数>|(<算术表达式>))中没有预期的算术表达式或是常量!\r\n");
		}
		//return 0;
	}
	return(fplace);
}

//<关系表达式> → <算术表达式><关系符><算术表达式>
bool CShixunView::guanxibds()
{
	strcpy(temp10,suanshubds());
	if(suanshubds())
	{
		
		flog++;
		
		if(!strcmp(result[flog].class0,"7"))
		{			
			
			strcpy(temp9,result[flog].value0);
			flog++;
			strcpy(temp11,suanshubds());
			strcpy(temp12," ");
			bb++;
			itoa(bb,B,10);
			m_chucuo+=_T(B);
			m_chucuo+=_T(".");
			m_chucuo+=_T("<");
			m_chucuo+=_T(temp9);
			m_chucuo+=_T(",");
			m_chucuo+=_T(temp10);
			m_chucuo+=_T(",");
			m_chucuo+=_T(temp11);
			m_chucuo+=_T(",");
			m_chucuo+=_T(temp12);
			m_chucuo+=_T("\t>\r\n");
			return suanshubds();
			
		}
		else
		{
			bb++;
			itoa(bb,B,10);
			m_chucuo+=_T(B);
			m_chucuo+=_T(".语法出错的位置坐标为");
			m_chucuo+=_T("(");
			m_chucuo+=_T(result1[flog-1].value1);
			m_chucuo+=_T(",");
			m_chucuo+=_T(result1[flog-1].value2);
			m_chucuo+=_T("):");
			//m_chucuo+=_T("产生式(<条件判断语句2> →;<语句><条件判断语句2>|空)中缺少;!\r\n");
			m_chucuo+=_T("产生式(<关系表达式> → <算术表达式><关系符><算术表达式>) 中缺少<关系符>!\r\n");
			suanshubds();
			return 0;
		}
	}
	else
	{
		if(!strcmp(result[flog].class0,"7"))
		{
			flog++;
			suanshubds();
		}
		else
			suanshubds();
		return 0;
	}
}


char* CShixunView::newtemp()
{
	char *p;
	char m[100];	
	p=(char*)malloc(100);
	k2++;
	itoa(k2,m,10);
	strcpy(p+1,m);
	p[0]='T';
	return(p);
}

⌨️ 快捷键说明

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