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

📄 syn_sem.cpp

📁 这是一个完整的词法分析器
💻 CPP
📖 第 1 页 / 共 2 页
字号:
					exit(-1);
				}
			}
			else
			{
				Erreur=true;
				cout<<no_ligne<<": ";
				cout<<"Il manque un 'Sinon' dans d''une instruction conditionnelle."<<endl;
				exit(-1);
			}
			break;
		default:
			Erreur=true;
			cout<<no_ligne<<": ";
			cout<<"Il manque un 'Finsi' a la fin d''une instruction conditionnelle."<<endl;
			exit(-1);
	}
}

void ea()
{
	ea1();
	suite_ea();
}

void suite_ea()
{
	if(Type_no!=42 && Type_no!=14 && Type_no!=9 && Type_no!=40 && Type_no!=35
	   && Type_no!=26 && Type_no!=27 && Type_no!=28 && Type_no!=29 && Type_no!=30
	   && Type_no!=31 && Type_no!=37)
	{
		switch(Type_no)
		{
			case 22:
				if(Type_no==22)
				{
					Type_no=LireUs();
					ea1();
					suite_ea();
				}
				else
				{
					Erreur=true;
					cout<<no_ligne<<": ";
					cout<<"Il manque un '+' dans une EA."<<endl;
					exit(-1);
				}
				break;
			case 23:
				if(Type_no==23)
				{
					Type_no=LireUs();
					ea1();
					suite_ea();
				}
				else
				{
					Erreur=true;
					cout<<no_ligne<<": ";
					cout<<"Il manque un '-' dans une EA."<<endl;
					exit(-1);
				}
				break;
			default:
				Erreur=true;
				//cout<<no_ligne<<": ";
				//cout<<"On ne reconnait pas une EA."<<endl;
				//exit(-1);
		}
	}
}

void ea1()
{
	ea2();
	suite_ea1();
}

void suite_ea1()
{
	if(Type_no!=42 && Type_no!=14 && Type_no!=9 && Type_no!=40 && Type_no!=35
	   && Type_no!=26 && Type_no!=27 && Type_no!=28 && Type_no!=29 && Type_no!=30
	   && Type_no!=31 && Type_no!=22 && Type_no!=23 && Type_no!=37)
	{
		switch(Type_no)
		{
			case 24:
				if(Type_no==24)
				{
					Type_no=LireUs();
					ea2();
					suite_ea1();
				}
				else
				{
					Erreur=true;
					cout<<no_ligne<<": ";
					cout<<"Il manque un '*' dans une EA."<<endl;
					exit(-1);
				}
				break;
			case 25:
				if(Type_no==25)
				{
					Type_no=LireUs();
					ea2();
					suite_ea1();
				}
				else
				{
					Erreur=true;
					cout<<no_ligne<<": ";
					cout<<"Il manque un '/' dans une EA."<<endl;
					exit(-1);
				}
				break;
			case 32:
				Type_no=LireUs();
				break;
			case 33:
				Type_no=LireUs();
				break;
			default:
				Erreur=true;
				//cout<<no_ligne<<": ";
				//cout<<"On ne reconnait pas une EA."<<endl;
				//exit(-1);
		}
	}
}

void ea2()
{
	switch(Type_no)
	{
		case 34:
			if(Type_no==34)
			{
				Type_no=LireUs();
				ea();
				if(Type_no==35)
				{
					Type_no=LireUs();
				}
				else
				{	
					Erreur=true;
					cout<<no_ligne<<": ";
					cout<<"Il manque un ')' dans une EA."<<endl;
					exit(-1);
				}
			}
			else
			{
				Erreur=true;
				cout<<no_ligne<<": ";
				cout<<"Il manque un '(' dans une EA."<<endl;
				exit(-1);
			}
			break;
		case 22:
			negatif=false;
			signe(negatif);
			operande();
			break;
		case 23:
			negatif=false;
			signe(negatif);
			operande();
			break;
		case 43:
			negatif=false;
			signe(negatif);
			operande();
			break;
		case 46:
			negatif=false;
			signe(negatif);
			operande();
			break;
		case 45:
			negatif=false;
			signe(negatif);
			operande();
			break;
		case 32:
			Type_no=LireUs();
			if(Type_no==43)
			{
				Type_no=LireUs();
			}
			else
			{
				Erreur=true;
				cout<<no_ligne<<": ";
				cout<<"Il manque un identificateur."<<endl;
				exit(-1);
			}
			break;
		case 33:
			Type_no=LireUs();
			if(Type_no==43)
			{
				Type_no=LireUs();
			}
			else
			{
				Erreur=true;
				cout<<no_ligne<<": ";
				cout<<"Il manque un identificateur."<<endl;
				exit(-1);
			}
			break;
		default:
			Erreur=true;
			cout<<no_ligne<<": ";
			cout<<"On ne reconnait pas une EA."<<endl;
			exit(-1);
	}
}

void operande()
{
	switch(Type_no)
	{
		case 43:
			if(Type_no==43)
			{
				Type_no=LireUs();
			}
			else
			{
				Erreur=true;
				cout<<no_ligne<<": ";
				cout<<"On ne reconnait pas un identificateur."<<endl;
				exit(-1);
			}
			break;
		case 46:
			if(Type_no==46)
			{
				Type_no=LireUs();
			}
			else
			{
				Erreur=true;
				cout<<no_ligne<<": ";
				cout<<"On ne reconnait pas un entier."<<endl;
				exit(-1);
			}
			break;
		default:
			Erreur=true;
			cout<<no_ligne<<": ";
			cout<<"On ne reconnait pas une operande."<<endl;
			exit(-1);
	}
}

void signe(bool negatif)
{
	if(Type_no!=43 && Type_no!=46)
	{
		switch(Type_no)
		{
			case 22:
				if(Type_no==22)
				{
					Type_no=LireUs();
				}
				else
				{
					Erreur=true;
					cout<<no_ligne<<": ";
					cout<<"Il manque un '+' devant une operande."<<endl;
					exit(-1);
				}
				break;
			case 23:
				if(Type_no==23)
				{
					negatif=true;
					Type_no=LireUs();
				}
				else
				{
					Erreur=true;
					cout<<no_ligne<<": ";
					cout<<"Il manque un '-' devant une operande."<<endl;
					exit(-1);
				}
				break;
			default:
				Erreur=true;
				cout<<no_ligne<<": ";
				cout<<"On ne reconnait pas une signe."<<endl;
				exit(-1);
		}
	}
}

void condition()
{
	condition1();
	suite_condition();
}

void condition1()
{
	condition2();
	suite_condition1();
}

void suite_condition()
{
	if(Type_no!=37 && Type_no!=42 && Type_no!=4 && Type_no!=9)
	{
		switch(Type_no)
		{
			case 20:
				if(Type_no==20)
				{
					Type_no=LireUs();
					condition1();
					suite_condition();
				}
				else
				{
					Erreur=true;
					cout<<no_ligne<<": ";
					cout<<"Il manque un 'Ou' dans une condition."<<endl;
					exit(-1);
				}
				break;
			default:
				Erreur=true;
				//cout<<no_ligne<<": ";
				//cout<<"On ne reconnait pas une condition."<<endl;
				//exit(-1);
		}
	}
}

void condition2()
{
	switch(Type_no)
	{
		case 18:
			if(Type_no==18)
			{
				Type_no=LireUs();
				condition3();
			}
			else
			{
				Erreur=true;
				cout<<no_ligne<<": ";
				cout<<"Il manque un 'Non' dans une condition."<<endl;
				exit(-1);
			}
			break;
		case 36:
			condition3();
			break;
		case 34:
			condition3();
			break;
		case 22:
			condition3();
			break;
		case 23:
			condition3();
			break;
		case 43:
			condition3();
			break;
		case 46:
			condition3();
			break;
		default:
			Erreur=true;
			cout<<no_ligne<<": ";
			cout<<"On ne reconnait pas une condition."<<endl;
			exit(-1);
	}
}

void suite_condition1()
{
	if(Type_no!=20 && Type_no!=37 && Type_no!=42 && Type_no!=4 && Type_no!=9)
	{
		switch(Type_no)
		{
			case 19:
				if(Type_no==19)
				{
					Type_no=LireUs();
					condition2();
					suite_condition1();
				}
				else
				{
					Erreur=true;
					cout<<no_ligne<<": ";
					cout<<"Il manque un 'Et' dans une condition."<<endl;
					exit(-1);
				}
				break;
			default:
				Erreur=true;
				//cout<<no_ligne<<": ";
				//cout<<"On ne reconnait pas une condition."<<endl;
				//exit(-1);
		}
	}
}

void condition3()
{
	switch(Type_no)
	{
		case 36:
			if(Type_no==36)
			{
				Type_no=LireUs();
				condition();
				if(Type_no==37)
				{
					Type_no=LireUs();
				}
				else
				{
					Erreur=true;
					cout<<no_ligne<<": ";
					cout<<"Il manque un ']' a la fin d''une condition."<<endl;
					exit(-1);
				}
			}
			else
			{
				Erreur=true;
				cout<<no_ligne<<": ";
				cout<<"Il manque un '[' a la fin d''une condition."<<endl;
				exit(-1);
			}
			break;
		case 34:
			relation();
			break;
		case 22:
			relation();
			break;
		case 23:
			relation();
			break;
		case 43:
			relation();
			break;
		case 46:
			relation();
			break;
		default:
			Erreur=true;
			cout<<no_ligne<<": ";
			cout<<"On ne reconnait pas une condition."<<endl;
			exit(-1);
	}
}

void relation()
{
	ea();
	suite_relation();
}

void suite_relation()
{
	switch(Type_no)
	{
		case 30:
			if(Type_no==30)
			{
				Type_no=LireUs();
				ea();
			}
			else
			{
				Erreur=true;
				cout<<no_ligne<<": ";
				cout<<"Il manque un '==' dans une relation."<<endl;
				exit(-1);
			}
			break;
		case 31:
			if(Type_no==31)
			{
				Type_no=LireUs();
				ea();
			}
			else
			{
				Erreur=true;
				cout<<no_ligne<<": ";
				cout<<"Il manque un '!=' dans une relation."<<endl;
				exit(-1);
			}
			break;
		case 27:
			if(Type_no==27)
			{
				Type_no=LireUs();
				ea();
			}
			else
			{
				Erreur=true;
				cout<<no_ligne<<": ";
				cout<<"Il manque un '<' dans une relation."<<endl;
				exit(-1);
			}
			break;
		case 26:
			if(Type_no==26)
			{
				Type_no=LireUs();
				ea();
			}
			else
			{
				Erreur=true;
				cout<<no_ligne<<": ";
				cout<<"Il manque un '>' dans une relation."<<endl;
				exit(-1);
			}
			break;
		case 28:
			if(Type_no==28)
			{
				Type_no=LireUs();
				ea();
			}
			else
			{
				Erreur=true;
				cout<<no_ligne<<": ";
				cout<<"Il manque un '>=' dans une relation."<<endl;
				exit(-1);
			}
			break;
		case 29:
			if(Type_no==29)
			{
				Type_no=LireUs();
				ea();
			}
			else
			{
				Erreur=true;
				cout<<no_ligne<<": ";
				cout<<"Il manque un '<=' dans une relation."<<endl;
				exit(-1);
			}
			break;
		default:
			Erreur=true;
			cout<<no_ligne<<": ";
			cout<<"On ne reconnait pas une relation."<<endl;
			exit(-1);
	}
}



/*************************************************************/
int main()
{
	int n=100;
	cout<<"Entrez le nom du fichier,S'il vous plait: "<<endl;
	cin.getline(FichierNom,n);
	fp=fopen(FichierNom,"r");
	while (fp==NULL)
	{
		cout<<"Pardon,Le fichier n'est existe!"<<endl;
		cout<<"Entrez un autre nom du fichier: "<<endl;
		cin.getline(FichierNom,n);
		fp=fopen(FichierNom,"r");
	}
	if((fp1=fopen("sortie.txt","w"))==NULL)
	{
		printf("can not open outfile\n");
		return -1;
	}
	Ensource();
	fclose(fp);
	cout<<endl;
	Debut_chercher();
	Fbuffer=1;
	programme();
	return 0;
}

⌨️ 快捷键说明

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