📄 实验二3.cpp
字号:
#include <iostream.h>
#include <string.h>
#include <stdio.h>
void Input(int i,int count,char G[20][20])//文法输入函数
{cout<<"请输入文法:"<<endl;
do {
gets(G[i]);
i=i+2;
}while(i<2*(count-1));
}
void Display(int i,int count,char G[20][20])//将文法显示
{cout<<"当前文法为:"<<endl;
do
{puts(G[i]);
i=i+2;
}while (i<2*(count-1));
}//**************文法输入完毕*********
int Prim_control(int i,int count,char G[20][20])//去掉U::=U文法
{int count1,a=0,b=0;
char m;
do{
m=G[a][0];
if((strlen(G[i])==5)&&(G[i][4]==m))
{
do{
G[i][20]=G[i+2][20];
i=i+1;
}while(i<2*(count-1));
count=count-1;
}
a=a+2;
}while (a<2*(count-1));
count1=count;
Display(0,count,G[count][20]);//显示前提条件判定后的结果
return(count1);
}
int First_control(int i,int j,int count,char G[20][20])//判断条件1函数
{int count2,a;
char m;
do{
for (j=4;j<=strlen(G[i]);j++)
{G[i+1][j]=1;
m=G[i][j+4];
if(m>='A'&&m<='Z') G[i+1][j+4]='*';
a=i+2;
do
{ if (G[a][0]=G[i+1][j+4])
First_control(a,j,count,G[count][20]);
}while(a<2*(count-1));
}
}while(i<2*(count-1));
i=0;
do{
if (G[i+1][0]=' ')
{
do{
G[i][j]=G[i+2][j];
i=i+1;
}while(i<2*(count-1));
count=count-1;
}
i=i+2;
}while(i<=2*(count-1));
count2=count;
Display(i,count2,G[count][20]);//显示条件1判定后的结果
return(count2);
}
int Second_control(int i,int j,int count,int G[20][20])//判断条件2的函数
{int count3,a;
char m,n;
do{
if(strlen(G[i])==4)
{m=G[i][4];
if ('z'>=m&&m>='a') G[i+1][0]='*';
a=i+2;
do{
for (j=4;j<=strlen(G[i]);j++)
{n=G[a][j];
if((n==G[i][0])||('z'>=n&&n>='a'))
G[a+1][0]='*';
Second_control(a,j,count,G[count][20]);
}
} while(a<=2*(count-1));
i=i+2;
}while(i<=2*(count-1));
i=1;
do
{if (G[i][0]==' ')
{
do{
G[i]=G[i+2];
i=i+2;
}while(i<2*(count-1));
count=count-1;
}
}while(i<=2*(count-1));
count3=count;
i=i+2;
Display(i,count3,G[count][20]);//显示条件2判定后的结果
return(count3);
}
//**********判断函数定义完毕*********
main() //定义主函数
{int count;
cout<<"请输入未压缩的文法中规则的个数:";
cin>>count;
char G[count][20]={''};
Input(0,count,G[count][20]);
Display(0,count,G[count][20]);
Prim_control(0,count,G[count][20]);
count=Prim_control(0,0,count,G[count][20]);
cout<<"经过前提判断后文法中的规则个数为:"<<count;
First_control(0,0,count,G[count][20]);
count=First_control(0,0,count,G[count][20]);
cout<<"经过条件一判断后文法中的规则个数为:"<<count;
Second_control(0,0,count,G[count][20]);
count=Second_control(0,0,count,G[count][20]);
cout<<"经过条件二判断后文法中的规则个数为:"<<count;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -