📄 文法识别.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 + -