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

📄 文法识别.cpp

📁 文法识别 文法识别 文法识别 文法识别
💻 CPP
字号:
//写一程序识别字符串a((a|b)*|ab*a)*b 
#include<iostream.h>
int isloop1(char *str)//找出连续b的序列。
{
	char *p=str;
	 int sum=0;
	  if(*p=='b')
	  {
		  sum++;
		   p++;
		   return sum+isloop1(p);
	  }
	  return 0;
}
int isloop2(char *str)//找处连续(a|b)序列
{
	char *p=str;
	 int sum=0;
	   if(*p=='(')
	   {
		   if(*(p+1)=='a'||*(p+1)=='b')
			   if(*(p+2)==')')
			   {
				   sum+=3;
				    p+=3;
					 return sum+isloop2(p);
			   }
	   }
	   return 0;
}
int isloop3(char *str)//找处连续((a|b)*|ab*a))序列。
{
	char *p=str;
	 int sum=0;
	   if(*p=='(')
	   {
		   p++;
		    sum++;
			 if(*p=='a')
			 {
				 p++;
				  sum++;
				   int s=isloop1(p);
				    if(s==0)
						return 0;
					 p+=s;
					  sum+=s;
					   if(*p=='a')
					   {
						   p++;
						    sum++;
							  if(*p==')')
							  {
								  p++;
								   sum++;
								   return sum+isloop3(p);
							  }
					   }
			 }
			 else
			   if(*p=='(')
			   {
				   int s=isloop2(p);
				    if(s==0)
						return 0;
					  p+=s;
					   sum+=s;
					     if(*p==')')
						 {
							 sum++;
							  p++;
							   return sum+isloop3(p);
						 }
			   }
	   }
	   return 0;
}
void  main()
{
	char str[100];
	  cout<<"请输入一个句型!"<<endl;
	    cin>>str;
		  char *p=str;
		   int yes=1;
		    if(*p=='a')
			{
				p++;
				if(*p=='(')
				{
					int sum=isloop3(p);
					 if(sum!=0)
					 {
						 p+=sum;
						  if(*p=='b')
						  {
							  p++;
							   if(*p!='\0')
								   yes=0;
						  }
						  else
							  yes=0;
					 }
					 else
						 yes=0;
				}
				else
					if(*p=='b')
					{
						p++;
						 if(*p!='\0')
							 yes=0;
					}
					else
						yes=0;
			}
			else
				yes=0;
			if(yes==1)
				cout<<"符合文法!"<<endl;
			  else
				  cout<<"非法输入!"<<endl;
}

⌨️ 快捷键说明

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