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

📄 语法分析.cpp

📁 简单语法分析器,是编译原理的作业,放在这里交流一下
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		}
		else
		{
				fprintf(out,"Error %d : 第 %d 行缺少变量标识符。\n",count++,p->hang);
		}
	}
	else if(p!=NULL&&p->zhi==38)
	{
		//正确
	}
	else
	{
		fprintf(out,"Error %d : 第 %d 行缺少 ) 符号。\n",count++,p->hang);
	}
}
void dan()
{
	if(p->zhi==76)
	{
		p=p->next;
		if(p!=NULL&&p->zhi==44)
		{
			//正确
		}
		else if(p!=NULL&&p->zhi==43)
		{
			p=p->next;
			dan();
		}
		else if(p!=NULL&&p->zhi==71)
		{
			p=p->next;
			if(p!=NULL&&(p->zhi==76||p->zhi==77))
			{
				p=p->next;
				if(p!=NULL&&p->zhi==44)
				{
					//正确
				}
				else if(p!=NULL&&p->zhi==43)
				{
					p=p->next;
					dan();
				}
				else
				{
					fprintf(out,"Error %d : 第 %d 行缺少 ; 符号。\n",count++,p->hang);
				}
			}
			else
			{
				fprintf(out,"Error %d : 第 %d 行变量没有赋值。\n",count++,p->hang);
			}
		}
		else
		{
			fprintf(out,"Error %d : 第 %d 行缺少 ; 符号。\n",count++,p->hang);
		}
	}
	else if(p->zhi==55)
	{
		p=p->next;
		if(p!=NULL&&p->zhi==76)
		{
			p=p->next;
			if(p!=NULL&&p->zhi==44)
			{
				//正确
			}
			else if(p!=NULL&&p->zhi==43)
			{
				p=p->next;
				dan();
			}
			else if(p!=NULL&&p->zhi==71)
			{
				p=p->next;
				if(p!=NULL&&(p->zhi==76||p->zhi==77))
				{
					p=p->next;
					if(p!=NULL&&p->zhi==44)
					{
						//正确
					}
					else if(p!=NULL&&p->zhi==43)
					{
						p=p->next;
						dan();
					}
					else
					{
						fprintf(out,"Error %d : 第 %d 行缺少 ; 符号。\n",count++,p->hang);
					}
				}
				else
				{
					fprintf(out,"Error %d : 第 %d 行变量没有赋值。\n",count++,p->hang);
				}
			}
			else
			{
				fprintf(out,"Error %d : 第 %d 行缺少 ; 符号。\n",count++,p->hang);
			}
		}
		else
		{
			fprintf(out,"Error %d : 第 %d 行缺少 变量名。\n",count++,p->hang);
		}
	}
	else
	{
		fprintf(out,"Error %d : 第 %d 行缺少合法标识符。\n",count++,p->hang);
	}
}
void dy()
{
	while(p!=NULL)
	{
		if(p->zhi==8||p->zhi==13||p->zhi==17||p->zhi==21||p->zhi==22||p->zhi==25)//char
		{
			p=p->next;
			if(p!=NULL)dan();
			else
			{
				fprintf(out,"Error %d : 第 %d 行缺少变量。\n",count++,p->hang);
			}
			if(p!=NULL&&p->zhi==44)
			{
				//正确
				p=p->next;
			}
			else
			{
				fprintf(out,"Error %d : 第 %d 行缺少 ; 符号。\n",count++,p->hang);
			}
		}
		else if(p->zhi==26||p->zhi==33)//unsigned
		{
			p=p->next;
			if(p!=NULL&&(p->zhi==8||p->zhi==13||p->zhi==17||p->zhi==21||p->zhi==22||p->zhi==25))//char
			{
				p=p->next;
				if(p!=NULL)dan();
				else
				{
					fprintf(out,"Error %d : 第 %d 行缺少变量。\n",count++,p->hang);
				}
				if(p!=NULL&&p->zhi==44)
				{
					//正确
					p=p->next;
				}
				else
				{
					fprintf(out,"Error %d : 第 %d 行缺少 ; 符号。\n",count++,p->hang);
				}
			}
			else if(p!=NULL)
			{
				dan();
				if(p!=NULL&&p->zhi==44)
				{
					//正确
					p=p->next;
				}
				else
				{
					fprintf(out,"Error %d : 第 %d 行缺少 ; 符号。\n",count++,p->hang);
				}
			}
			else
			{
				fprintf(out,"Error %d : 第 %d 行缺少合法标识符。\n",count++,p->hang);
			}
		}
		else if(p->zhi==29)//struct
		{
			p=p->next;
			if(p!=NULL&&p->zhi==76)
			{
				p=p->next;
				if(p!=NULL&&p->zhi==41)
				{
					p=p->next;
					dy();
					if(p!=NULL&&p->zhi==42)
					{
						p=p->next;
						if(p!=NULL&&p->zhi==44)
						{
							//正确
							p=p->next;
						}
						else
						{
							fprintf(out,"Error %d : 第 %d 行缺少 ; 符号。\n",count++,p->hang);
						}
					}
					else
					{
						fprintf(out,"Error %d : 第 %d 行缺少 } 符号。\n",count++,p->hang);
					}
				}
				else if(p!=NULL&&(p->zhi==76||p->zhi==55))//*
				{
					dan();
					if(p!=NULL&&p->zhi==44)
					{
						//正确
						p=p->next;
					}
					else
					{
						fprintf(out,"Error %d : 第 %d 行缺少 ; 符号。\n",count++,p->hang);
					}
				}
				else
				{
					fprintf(out,"Error %d : 第 %d 行缺少 { 符号。\n",count++,p->hang);
				}
			}
			else
			{
				fprintf(out,"Error %d : 第 %d 行缺少结构体名称。\n",count++,p->hang);
			}
		}
		else
		{
			break;
		}
	}
}
void start()
{
	while(p!=NULL)
	{
		if(p->zhi==0)
		{
			p=p->next;
			if(p!=NULL&&p->zhi==61)
			{
				p=p->next;
				if(p!=NULL&&p->zhi==76)
				{
					p=p->next;
					if(p!=NULL&&p->zhi==48)
					{
						p=p->next;
						if(p!=NULL&&p->zhi==76)
						{
							p=p->next;
							if(p!=NULL&&p->zhi==60)
							{
								//正确
								p=p->next;
							}
							else
							{
								fprintf(out,"Error %d : 第 %d 行缺少 > 符号。\n",count++,p->hang);
							}
						}
						else
						{
							fprintf(out,"Error %d : 第 %d 行缺少文件后缀名。\n",count++,p->hang);
						}
					}
					else if(p!=NULL&&p->zhi==60)
					{
						//正确
						p=p->next;
					}
					else
					{
						fprintf(out,"Error %d : 第 %d 行缺少 > 符号。\n",count++,p->hang);
					}
				}
				else
				{
					fprintf(out,"Error %d : 第 %d 行缺少文件名。\n",count++,p->hang);
				}
			}
			else if(p!=NULL&&p->zhi==45)
			{
				p=p->next;
				if(p!=NULL&&p->zhi==76)
				{
					p=p->next;
					if(p!=NULL&&p->zhi==48)
					{
						p=p->next;
						if(p!=NULL&&p->zhi==76)
						{
							p=p->next;
							if(p!=NULL&&p->zhi==45)
							{
								//正确
								p=p->next;
							}
							else
							{
								fprintf(out,"Error %d : 第 %d 行缺少 \" 符号。\n",count++,p->hang);
							}
						}
						else
						{
							fprintf(out,"Error %d : 第 %d 行缺少文件后缀名。\n",count++,p->hang);
						}
					}
					else if(p!=NULL&&p->zhi==45)
					{
						//正确
						p=p->next;
					}
					else
					{
						fprintf(out,"Error %d : 第 %d 行缺少 \" 符号。\n",count++,p->hang);
					}
				}
				else
				{
					fprintf(out,"Error %d : 第 %d 行缺少文件名。\n",count++,p->hang);
				}
			}
			else
			{
				fprintf(out,"Error %d : 第 %d 行缺少 \" 或者 < 符号。\n",count++,p->hang);
			}
		}
		else if(p->zhi==1)
		{
			p=p->next;
			if(p!=NULL&&p->zhi==76)
			{
				p=p->next;
				if(p!=NULL)
				{
					//正确
					p=p->next;
				}
				else
				{
					fprintf(out,"Error %d : 第 %d 行缺少赋值。\n",count++,p->hang);
				}
			}
			else 
			{
				fprintf(out,"Error %d : 第 %d 行缺少标识符。\n",count++,p->hang);
			}
		}
		else if(p->zhi==8||p->zhi==13||p->zhi==17||p->zhi==21||p->zhi==22||p->zhi==25)//char
		{
			p=p->next;
			if(p!=NULL&&(p->zhi==55||p->zhi==76))dan();
			else
			{
				fprintf(out,"Error %d : 第 %d 行缺少变量。\n",count++,p->hang);
			}
			if(p!=NULL&&p->zhi==44)
			{
				//正确
				p=p->next;
			}
			else
			{
				fprintf(out,"Error %d : 第 %d 行缺少 ; 符号。\n",count++,p->hang);
			}
		}
		else if(p->zhi==26||p->zhi==33)//unsigned
		{
			p=p->next;
			if(p!=NULL&&(p->zhi==8||p->zhi==13||p->zhi==17||p->zhi==21||p->zhi==22||p->zhi==25))//char
			{
				p=p->next;
				if(p!=NULL&&(p->zhi==55||p->zhi==76))dan();
				else
				{
					fprintf(out,"Error %d : 第 %d 行缺少变量。\n",count++,p->hang);
				}
				if(p!=NULL&&p->zhi==44)
				{
					//正确
					p=p->next;
				}
				else
				{
					fprintf(out,"Error %d : 第 %d 行缺少 ; 符号。\n",count++,p->hang);
				}
			}
			else if(p!=NULL&&(p->zhi==55||p->zhi==76))
			{
				dan();
				if(p!=NULL&&p->zhi==44)
				{
					//正确
					p=p->next;
				}
				else
				{
					fprintf(out,"Error %d : 第 %d 行缺少 ; 符号。\n",count++,p->hang);
				}
			}
			else
			{
				fprintf(out,"Error %d : 第 %d 行缺少合法标识符。\n",count++,p->hang);
			}
		}
		else if(p->zhi==34)//void*******************************************************
		{
			p=p->next;
			if(p!=NULL&&p->zhi==76)
			{
				p=p->next;
				if(p!=NULL&&p->zhi==37)
				{
					p=p->next;
					can();
					if(p!=NULL&&p->zhi==38)
					{
						p=p->next;
						if(p!=NULL&&p->zhi==44)
						{
							//正确
							p=p->next;
						}
						else if(p!=NULL&&p->zhi==41)
						{
							p=p->next;
							dy();
							yu();
							if(p!=NULL&&p->zhi==42)
							{
								//正确
								p=p->next;
							}
							else
							{
								fprintf(out,"Error %d : 第 %d 行缺少 } 符号。\n",count++,p->hang);
							}
						}
						else
						{
							fprintf(out,"Error %d : 第 %d 行缺少 ; 符号。\n",count++,p->hang);
						}
					}
					else
					{
						fprintf(out,"Error %d : 第 %d 行缺少 ) 符号。\n",count++,p->hang);
					}
				}
				else 
				{
					fprintf(out,"Error %d : 第 %d 行缺少 ( 符号。\n",count++,p->hang);
				}
			}
			else
			{
				fprintf(out,"Error %d : 第 %d 行缺少合法标识符。\n",count++,p->hang);
			}
		}
		else if(p->zhi==29)//struct
		{
			p=p->next;
			if(p!=NULL&&p->zhi==76)
			{
				p=p->next;
				if(p!=NULL&&p->zhi==41)
				{
					p=p->next;
					dy();
					if(p!=NULL&&p->zhi==42)
					{
						p=p->next;
						if(p!=NULL&&p->zhi==44)
						{
							//正确
							p=p->next;
						}
						else
						{
							fprintf(out,"Error %d : 第 %d 行缺少 ; 符号。\n",count++,p->hang);
						}
					}
					else
					{
						fprintf(out,"Error %d : 第 %d 行缺少 } 符号。\n",count++,p->hang);
					}
				}
				else if(p!=NULL&&(p->zhi==76||p->zhi==55))//*
				{
					dan();
					if(p!=NULL&&p->zhi==44)
					{
						//正确
						p=p->next;
					}
					else
					{
						fprintf(out,"Error %d : 第 %d 行缺少 ; 符号。\n",count++,p->hang);
					}
				}
				else
				{
					fprintf(out,"Error %d : 第 %d 行缺少 { 符号。\n",count++,p->hang);
				}
			}
			else
			{
				fprintf(out,"Error %d : 第 %d 行缺少结构体名称。\n",count++,p->hang);
			}
		}
		else
		{
			fprintf(out,"Error %d : 第 %d 行缺少关键字。\n",count++,p->hang);
			p=p->next;
		}
	}
}

⌨️ 快捷键说明

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