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

📄 shixunview.cpp

📁 笨程序实现了编译原理中的编译程序
💻 CPP
📖 第 1 页 / 共 4 页
字号:
				{
					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("产生式(<程序> → main(){分程序})中'()'后面缺少'{'!\r\n");
					fenchengxu();
					flog++;
					if(strcmp(result[flog].value0,""))
					{
						if(strcmp(result[flog].value0,"}"))
						{
							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("产生式(<程序> → main(){分程序})中555555缺少}!\r\n");
						}
					}
					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("产生式(<程序> → main(){分程序})中777缺少}!\r\n");///////////
					}
					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("产生式(<程序> → main(){分程序})中'('后面缺少')'!\r\n");
				if(strcmp(result[flog].value0,"{"))
				{
					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("产生式(<程序> → main(){分程序})中')'后面缺少'{'!\r\n");
				}
				else
				{
					flog++;
				}
				fenchengxu();
				flog++;
				if(strcmp(result[flog].value0,""))
				{
					if(strcmp(result[flog].value0,"}"))
					{
						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("产生式(<程序> → main(){分程序})中'{'后面缺少'}'!\r\n");
					}
				}
				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("产生式(<程序> → main(){分程序})中'{'后面缺少'}'!\r\n");
				}
				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("产生式(<程序> → main(){分程序})中main后面缺少'('!\r\n");
			if(strcmp(result[flog].value0,")"))
			{
				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("产生式(<程序> → main(){分程序5555})中main后面缺少')'!\r\n");
			}
			else
			{
				flog++;
			}
			if (strcmp(result[flog].value0,"{"))
			{
				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("产生式(<程序> → main(){分程5555序})中main后面缺少'{'!\r\n");
			}
			else
			{
				flog++;
			}
			fenchengxu();
			flog++;
			if(strcmp(result[flog].value0,""))
			{
				if(strcmp(result[flog].value0,"}"))
				{
					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("产生式(<程序> → main(){分444程序})中main后面缺少'}'!\r\n");
				}
			}
			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("产生式(<程序> → main(){分程序})中main后5555面缺少'}'!\r\n");
			}
			return 0;
		}
	}
	else//main
	{
		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("产生式(<程序> → main(){分程序})中源文件开头缺少'main'!\r\n");
		return 0;
	}
}
//<分程序> → <变量说明2> <变量说明><语句>
bool CShixunView::fenchengxu(void)
{
	if(bianliangsm2())
	{
		flog++;
		if(bianliangsm())
		{
			flog++;
			return yuju();
		}
		else
		{
			flog++;
			yuju();
		//	m_chucuo+=_T("产生式(<分程序> → <变量说明2> <变量说明><语句>)中<<变量说明>分析出错!\r\n");
			return 0;
		}
	}
	else
	{
		flog++;
		bianliangsm();
		flog++;
		yuju();
		//m_chucuo+=_T("产生式(<分程序> → <变量说明> <语句>)中<变量说明>分析出错!\r\n");
		return 0;
	}
}
//<变量说明> → 空| <类型><标识符><变量>;<变量声明>
bool CShixunView::bianliangsm()
{
	int d;
	if(leixing())
	{
		flog++;
		if(!strcmp(result[flog].class0,"2"))
		{
			flog++;
			if(bianliang())
			{
				flog++;
				if(!strcmp(result[flog].value0,";"))
				{
					flog++;
					return bianliangsm();
				}
				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("产生式(<变量说明> → <类型> <变量>;| <类型> <变量>;<变量说明>)中变量后面缺少缺少;!\r\n");
					bianliangsm();
					return 0;
				}
			}
			else//,a变量出错 
			{
				flog++;
				if(strcmp(result[flog].value0,";"))
				{
					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--;
				}
				flog++;
				bianliangsm();
				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("产生式(<变量说明> → <类型> <变量>;| <类型> <变量>;<变量说明>)中<变量>分析出错!\r\n");
			bianliang();
			flog++;
			if(strcmp(result[flog].value0,";"))
			{
				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--;
			}
			flog++;
			bianliangsm();
			return 0;
		}
	}
	else//类型不符
	{
		if(!strcmp(result[flog].class0,"2"))
		{
			flog++;
			d=bianliang();
			if(d&&(!strcmp(result1[flog].value2,result1[flog-1].value2)))
			{
				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("产生式(<变量说明> → <类型> <变量>;| <类型>000000 <变量>;<变量说明>)中<类型>分析出错!\r\n");
				//return 0;
				flog++;
				if(strcmp(result[flog].value0,";"))
				{
					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--;
				}
				flog++;
				bianliangsm();
			}
			else if(!d)//非法的变量,| a
			{
				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++;
				if(strcmp(result[flog].value0,";"))
				{
					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--;
				}
				flog++;
				bianliangsm();
			}
			else
			{
				flog--;
				return 1;
			}
			return 0;
		}
		else
		{
			flog--;
			return 1;
		}
	}
}
// <变量声明2>-><类型><标识符><变量>;为空时出错!
bool CShixunView::bianliangsm2()
{
	int d;
	if(leixing())
	{
		flog++;
		if(!strcmp(result[flog].class0,"2")&&(!strcmp(result1[flog-1].value1,result1[flog].value1)))
		{
			flog++;
			if((!strcmp(result1[flog-1].value1,result1[flog].value1))&&bianliang())
			{
				flog++;
				if(!strcmp(result[flog].value0,";")&&(!strcmp(result1[flog-1].value1,result1[flog].value1)))
					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>-><类型><标识符><变量>)中<类型>缺少;!\r\n");
					//return 0;
					flog--;
					return 0;
				}
			}
			else//,a变量出错 
			{
				flog++;
				if(strcmp(result[flog].value0,";"))
				{
					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");
					//return 0;
					flog--;
				}
				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");
			bianliang();
			flog++;
			if(strcmp(result[flog].value0,";"))
			{
				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");
				//return 0;
				flog--;
			}
			return 0;
		}
	}
	else//类型不符
	{
		if(!strcmp(result[flog].class0,"2"))
		{
			flog++;
			d=bianliang();
			if(d&&(strcmp(result1[flog].value2,result1[flog-1].value2)))
			{
				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");
				//return 0;
				flog++;
				if(strcmp(result[flog].value0,";"))
				{
					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");
					//return 0;
					flog--;
				}
			}
	
			else if(!d)//非法的变量,| a
			{
				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");
				//return 0;
				flog++;
				if(strcmp(result[flog].value0,";"))
				{	
					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");
					//return 0;
					flog--;
				}
			}
			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");
				//return 0;
				flog--;
			}
			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");
			//return 0;
			flog--;
			return 0;
		}
	}
}
//<语句> → <赋值语句>| <条件判断语句>
bool CShixunView::yuju()
{
	if(!strcmp(result[flog].value0,"if"))
	{
		return tiaojian();
	}
	else
	{
		return fuzhi();
	}
}
//<类型> → int | real | char
bool CShixunView::leixing()
{
	if((strcmp(result[flog].value0,"int")==0)||(strcmp(result[flog].value0,"real")==0)||(strcmp(result[flog].value0,"char")==0))
	{
		return 1;
	}
	else
	{
		return 0;
	}
}

//变量-〉,<标志符><变量>|空
bool CShixunView::bianliang()
{
	if(!strcmp(result[flog].value0,",")&&(!strcmp(result1[flog-1].value1,result1[flog].value1)))
	{
		flog++;
		if(!strcmp(result[flog].class0,"2")&&(!strcmp(result1[flog-1].value1,result1[flog].value1)))
		{
			flog++;
			return bianliang();
		}
		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("产生式(变量-〉,<标志符><变量>|空)中多余;!\r\n");
			bianliang();
			return 0;

⌨️ 快捷键说明

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