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

📄 sffxq.cpp

📁 算符优先语法分析器.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		sh=exchang(S[i]);
		trl=exchang(TR[j]);
		if(sh==-1&&trl!=-2)
		{
			buf=i;
			 i--;
			 sh=exchang(S[i]);
			 if(sh==-2)
			 {
				 print(buf,j,M);
				 printf("     \n");
				 i=buf;
				 S[++i]=TR[j];
				 continue;
			 }
			 else if(sh==-1){printf("该句子不能被识别\n");return 0;}
			 else 
			 {
				 if(M[sh][trl]==1)
				 {
                    print(buf,j,M);printf("      ");
				    k=left(i,j,M);
					for(i=k;i<=buf;i++)
						printf("%c",S[i]);
					printf("\n");
					S[k]='V';
				    i=k;
				    j--;
				    continue;
				 }
			     else if(M[sh][trl]==-1||M[sh][trl]==0)
				 {
			        print(buf,j,M);printf("    \n");
			        i=buf;
                    S[++i]=TR[j];
			        continue;
				 }
			     else return -1;
			}
		}
	    else if(sh!=-1&&sh!=-2&&trl!=-2)
		{
			buf=i;
			if(M[sh][trl]==-1||M[sh][trl]==0)
			{
			   print(i,j,M);printf("    \n");
               S[++i]=TR[j];
			   continue;
			}
			else if(M[sh][trl]==1)
			{
				print(i,j,M);printf("     ");
				k=left(i,j,M);
				for(i=k;i<=buf;i++)
						printf("%c",S[i]);
				printf("\n");
				S[k]='V';
				i=k;
				j--;
				continue;
			}
			else {printf("该句子不能被识别\n");return 0;}
		}
		else if(sh==-1&&trl==-2)
		{
			buf=i;
			if(i==1){fale=1;return 1;}
			else 
			{
				print(i,j,M);printf("     ");
				i--;
				k=left(i,j,M);
				for(i=k;i<=buf;i++)
						printf("%c",S[i]);
				printf("\n");
				S[k]='V';
				i=k;
				print(i,j,M);printf("     \n");
				j--;
				continue;
			}
		}
		else if(sh!=-1&&sh!=-2&&trl==-2)
		{
			buf=i;
             print(i,j,M);printf("     ");
			 k=left(i,j,M);
			 for(i=k;i<=buf;i++)
						printf("%c",S[i]);
			 printf("\n");
			 S[k]='V';
			 i=k;
			 j--;
			 continue;
		}
		else {printf("该句子不能被识别\n");return 0;}
	}
	if(j>=len&&fale==1) return 1;
	else return 0;
}
//*********************************************************************************************
void lastterm(char *s,int **m)
{
  	int flag=0;
    int a,b,j,i=0;
	while(s[i]!='$')
	{   
	   if(flag==0)
	   {	a=exchang(s[i]); flag=1;      }
       else
	   {   
	      if(s[i]=='|'||s[i]=='\n')
		  {   j=i;
		      j--;
		      while(isupper(s[j]))
			  {  j--; }
		      if(s[j]=='=')
	 	    	goto q;
	          else 
			  {  
				  if(s[i]=='\n') 
				  {  
			        flag=0;
				  }
			     b=exchang(s[j]); m[a][b]=1; 
				 goto q;
			  }
		  }
	   }
	q:		i++;
	}

}
//********************************************************************************************
void main()
{  int n,l,k,i;
   char c,ch;
    FILE *fp;
   int **m1,**m2,**m3,**m4,**m5,**m6,**m7,**m8,**M,**EM,**FM,**LM; 
   char s[MAX];
   if ((fp=fopen("4.txt","r"))==NULL)
  printf("源程序无法打开!\n"); 
 else
 {  
	 printf("\n************************************文法****************************************");
	 while((ch=fgetc(fp))!=EOF) 
	 {
		 printf("%c",ch);
	 }
	 fclose(fp);
   printf("********************************************************************************");
   fp=fopen("4.txt","r");
  
   l=Input(fp,s);

   //gramer(s);
    n=vntcount(s,vn,vt,l);
	printf("\n");
    M=new int*[n];          
   for(i=0;i<n;i++)
	  M[i]=new int[n];
   EM=new int*[n];          
   for(i=0;i<n;i++)
	  EM[i]=new int[n];
   FM=new int*[n];          
   for(i=0;i<n;i++)
	  FM[i]=new int[n];
   LM=new int*[n];          
   for(i=0;i<n;i++)
	  LM[i]=new int[n];
   m1=new int*[n];          
    for(i=0;i<n;i++)
	  m1[i]=new int[n];
   m2=new int*[n];          
   for(i=0;i<n;i++)
	   m2[i]=new int[n];
   m3=new int*[n];          
   for(i=0;i<n;i++)
	   m3[i]=new int[n];
   m4=new int*[n];          
   for(i=0;i<n;i++)
	   m4[i]=new int[n];
   m5=new int*[n];          
   for(i=0;i<n;i++)
	   m5[i]=new int[n];
   m6=new int*[n];          
   for(i=0;i<n;i++)
	   m6[i]=new int[n];
   m7=new int*[n];          
   for(i=0;i<n;i++)
	   m7[i]=new int[n];
   m8=new int*[n];          
   for(i=0;i<n;i++)
	   m8[i]=new int[n];

   init(EM,n);
   init(FM,n);
   init(LM,n);
   init(m1,n);
   init(m2,n);
   init(m3,n);
   init(m4,n);
   init(m5,n);
   init(m6,n);
   init(m7,n);
   init(m8,n);
   
   grammar(vn,vt,s1);
    int j;
     equal(s,EM);
	 printf("*************************±*****************************\n");
	 printf("   ");
	 for(i=0;i<n;i++)
	 printf("%c  ",s1[i]);
	 printf("\n");
	 for(i=0;i<n;i++)
	 {  printf("%c  ",s1[i]);
		 for(j=0;j<n;j++)
	  printf("%d  ",EM[i][j]);
	  printf("\n");
	 }	  
	 printf("**************************first****************************\n");
	    first(s,m2);
		printf("   ");
	 for(i=0;i<n;i++)
	 printf("%c  ",s1[i]);
	 printf("\n");
	 for(i=0;i<n;i++)
	 {  printf("%c  ",s1[i]);
		 for(j=0;j<n;j++)
	  printf("%d  ",m2[i][j]);
	  printf("\n");
	 }
	  printf("**************************last****************************\n");
	 last(s,m3);
	 	printf("   ");
	 for(i=0;i<n;i++)
	 printf("%c  ",s1[i]);
	 printf("\n");
	 for(i=0;i<n;i++)
	 {  printf("%c  ",s1[i]);
		 for(j=0;j<n;j++)
	  printf("%d  ",m3[i][j]);
	  printf("\n");
	 }
	  printf("**************************first+****************************\n");

     warchall(m2,n);
	 for(i=0;i<n;i++)
		 for(j=0;j<n;j++)
			 m1[i][j]=m2[i][j];
    	printf("   ");
	 for(i=0;i<n;i++)
	 printf("%c  ",s1[i]);
	 printf("\n");
	 for(i=0;i<n;i++)
	 {  printf("%c  ",s1[i]);
		 for(j=0;j<n;j++)
	  printf("%d  ",m2[i][j]);
	  printf("\n");
	 }
	  printf("**************************(first*)****************************\n");
	 first1(m2,n);
	     	printf("   ");
	 for(i=0;i<n;i++)
	 printf("%c  ",s1[i]);
	 printf("\n");
	 for(i=0;i<n;i++)
	 {  printf("%c  ",s1[i]);
		 for(j=0;j<n;j++)
	  printf("%d  ",m2[i][j]);
	  printf("\n");
	 }

	  firstterm(s,m5);
	  printf("**************************(firstterm)****************************\n");
	     	printf("   ");
	 for(i=0;i<n;i++)
	 printf("%c  ",s1[i]);
	 printf("\n");
	 for(i=0;i<n;i++)
	 {  printf("%c  ",s1[i]);
		 for(j=0;j<n;j++)
	  printf("%d  ",m5[i][j]);
	  printf("\n");
	 }
	 	  printf("**************************(lastterm)****************************\n");
	 lastterm(s,m7);
	 	printf("   ");
	 for(i=0;i<n;i++)
	 printf("%c  ",s1[i]);
	 printf("\n");
	 for(i=0;i<n;i++)
	 {  printf("%c  ",s1[i]);
		 for(j=0;j<n;j++)
	  printf("%d  ",m7[i][j]);
	  printf("\n");
	 }
	 printf("**************************FM*****************************\n");
      multi(EM,m2,m6,n);
	  multi(m6,m5,FM,n);
   	  printf("   ");
	 for(i=0;i<n;i++)
	 printf("%c  ",s1[i]);
	 printf("\n");
	 for(i=0;i<n;i++)
	 {  printf("%c  ",s1[i]);
		 for(j=0;j<n;j++)
	  printf("%d  ",FM[i][j]);
	  printf("\n");
	 }
	  printf("**************************LM*****************************\n");

  	 warchall(m3,n);
     first1(m3,n);
	 multi(m3,m7,m4,n);
	 change(m4,n);
	 multi(m4,EM,LM,n);
	  printf("   ");
	 for(i=0;i<n;i++)
	 printf("%c  ",s1[i]);
	 printf("\n");
	 for(i=0;i<n;i++)
	 {  printf("%c  ",s1[i]);
		 for(j=0;j<n;j++)
	     printf("%d  ",LM[i][j]);
	      printf("\n");
	 }
      printf("**************************M*****************************\n");
	  equal1(s,m8);
	  k=requirm(m8,FM,LM,M,n);
	  if(k==1) goto p;
	else{
	  printf("   ");
	 for(i=0;i<n;i++)
	 printf("%c  ",s1[i]);
	 printf("\n");
	 for(i=0;i<n;i++)
	 {  printf("%c  ",s1[i]);
		 for(j=0;j<n;j++)
	  printf("%d  ",M[i][j]);
	  printf("\n");
	 }

	  printf("\n********************************************************\n");
	  printf("输入待检查的字符串以#号结束\n");
	  i=0;
	while((c=getchar())!='\n')
	{
		TR[i]=c;
		i++;
	}
	TR[i]='\0';
	S[0]='#';
	printf("符号栈S 关系   输入流   最左素短语\n");
	i=analysis(M);
	printf("*********************************************************\n");
	if(i==1) printf("!!!!!!!!!!!!!!!!!OK!!!!!!!!!!!!!!!!!\n");
	else
p:		printf("*******************over***********************************\n");
	}
	}
}

⌨️ 快捷键说明

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