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

📄 alysis.cpp

📁 编译原理文法分析小程序。在VC环境下编译运行通过。可正常运行。
💻 CPP
字号:
#include<iostream>
using namespace std;
const int MAX=150;
class Chomsky
{
	char p[MAX];
	int i,j,z,z1;
	char VN[50];
	char VT[50];
	char start;
public:
	int sort;
	void inputG(void)
	{
		char tmp;
		cout<<"请输入文法G的非终结符号集VN,每个符号用“,”隔开,全输入完毕请输入“.”:"<<endl;
		for(i=0;i<50;i++)
		{
			cin>>tmp;
			if(tmp!='.')
			{
				VN[i]=tmp;
			}
			else {z=i;break;}
		}
		cout<<"请输入文法G的终结符号集VT,每个符号用“,”隔开,全输入完毕请输入“.”:"<<endl;
		for(i=0;i<50;i++)
		{
			cin>>tmp;
			if(tmp!='.')
			{
				VT[i]=tmp;
			}
			else {z1=i;break;}
		}
		cout<<"请输入初始符号:"<<endl;
		cin>>start;
		cout<<"输入产生式集p(要求:每个产生式用“,”隔开,全输入完毕请输入“.”):"<<endl;
		for(i=0;i<MAX;i++)
		{
			cin>>tmp;
			if(tmp!='.')
			{
				p[i]=tmp;
			}
			else {j=i;p[i]='.';break;}
			
		}
	}
	void outputG(void)
	{
		cout<<"文法G=({";
		for(i=0;i<z;i++)
		{
			cout<<VN[i];
		}
		cout<<"},{";
		for(i=0;i<z1;i++)
		{
			cout<<VT[i];
		}
		cout<<"},P,"<<start<<"}"<<endl;
		cout<<"其中,P={";
		for(i=0;i<=j;i++)
		{
			cout<<p[i];
		}
		cout<<"}"<<endl;
		cout<<"这是"<<sort<<"型文法。"<<endl;
	}
	int sortG(void)
	{
		sort=2;
		int flag=0;
		int leftcount=0;
		int rightcount=0;
		int k=0,m=0,q,v,g;
		int tst1[MAX];
		int tst2[MAX];
		int left[MAX];
		int right2[MAX];
		int right1[MAX];
		int pflag;
		int c=0;
		int b=0;
		int o=0;
		int tmp1=0;
		int tmp2=50;
		int tmp3=0;
		char tt[MAX];
		for(i=0;i<=j;i++)
		{
			if((p[i]==',')||(p[i]=='.'))
			{
				
				left[m]=leftcount;
				if(tmp2>rightcount)
				{right2[m]=rightcount;}
				else{right2[m]=tmp2;}
				if(tmp1<rightcount)
				{right1[m]=rightcount;}
				else{right1[m]=tmp1;}
				tst2[m]=right2[m]-left[m];
				tst1[m]=right1[m]-left[m];
				m++;
				leftcount=0;
				rightcount=0;
				tmp1=0;
				tmp2=50;
				flag=0;
				continue;
			}
			else if((p[i]==':')||(p[i]=='='))
			{
				flag=1;
				continue;
			}
			else if(flag==0){leftcount++;continue;}
			else if((flag==1)&&(p[i]!='|')){rightcount++;continue;}
			else if((flag==1)&&(p[i]=='|'))
			{
				if(rightcount<tmp2){tmp2=rightcount;tmp3=rightcount;rightcount=0;continue;}
				if((rightcount>tmp1)||(tmp3>tmp1))
				{
					tmp1=max(tmp3,rightcount);
					rightcount=0;
					continue;
				}
			}
		}


		for(q=0;q<m;q++)
		{
			if(left[q]>1)
			{sort=1;break;}
			else continue;
		}
		for(v=0;v<m;v++)
		{
			if(tst2[v]<0)//不是1型文法
			{sort=0;break;}
			else continue;
		}
		if(sort==2)
		{
			for(i=0;i<=j;i++)
			{
				if((i!=0)&&((p[i-1]=='=')||(p[i-1]=='|')))
				{
					tt[o]=p[i];
					o++;
				}
				else continue;
			}
			for(i=0;i<o;i++)
			{
				for(g=0;g<z;g++)
				{
					if(tt[i]==VN[g])
					{pflag=0;break;}
					else continue;
				}
			}
			for(v=0;v<m;v++)
			{
				if((tst1[v]>1)||(pflag==0))
				{sort=2;break;}
				else
				{sort=3;continue;}
			}
		}
		return sort;
	}

};
int main()
{
	Chomsky G;
	G.inputG();
	G.sortG();
	G.outputG();
	return 0;
}

⌨️ 快捷键说明

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