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

📄 实验二3.cpp

📁 这是几个编译原理实验程序,有做实验的朋友可以用用!
💻 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 + -