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

📄 dalu.c

📁 是有关编译原理的,可以自动对输入的??分析,生成first集和follow集
💻 C
字号:
char LL1[20][50];
char first[20][50];
char follow[20][50];
char father[20];
int  i=0,j1=0,j2;
int  p1=0,t1=3;
int  p2=0,t2=0;
int  f1=0,f2=-1;
int  n,v,fi,fj;
int  x,y;
char ch;

int echo1(char c)
{  int i=0,m=0;
   for(i=0;i<=n;i++)
     if((LL1[i][0]==c)&&(LL1[i][3]=='@'))   m=1;
   return(m);  
}

void echo2(char c)
{  
   for(i=0;i<=n;i++)
   {  if(LL1[i][0]==c){  j1=2;
                         j2=3;
                        if(LL1[i][j2]<='Z'&&LL1[i][j2]>='A')
                          {  while(j2==3||(echo1(LL1[i][j1])==1&&(LL1[i][j2]<='Z'&&LL1[i][j2]>='A')))
                              { father[f1]=LL1[i][j2];
                                f1++;
                                j1++;
                                j2++; 
                               } 
                           }
                        else  {  father[f1]=LL1[i][3];
                                 f1++;
                               }
                      }
   }
   f2++;
}

int echo3(char c)
{  int k,k1=0;
   if(p1==0)   k1=0;
   else  for(k=0;k<p1;k++) { if(first[k][0]==c)  {k1=1;break;} }
   return(k1);
 }
main()
{  scanf("%c",&ch);
   while(ch!='?')
   { while(ch!=';')
     { LL1[i][j1]=ch;
       j1++;
       scanf("%c",&ch);
      }
     LL1[i][j1]=';';
     i++;
     j1=0;
     scanf("%c",&ch);
     scanf("%c",&ch);
   }
   n=i-1;
   for(v=0;v<=n;v++)
   { if(echo3(LL1[v][0])==0)
     {  echo2(LL1[v][0]);
        while(f1!=f2)
         {  if(father[f2]<='Z'&&father[f2]>='A')
                echo2(father[f2]);
            else  f2++;
          }
        fi=0;
        fj=0;
        for(fi=0;fi<f2-1;fi++)
           for(fj=fi+1;fj<f2;fj++)
           if(father[fi]==father[fj])  father[fj]='A';
        first[p1][0]=LL1[v][0];
        first[p1][1]='=';
        first[p1][2]='{';
        for(f1=0;f1<f2;f1++)
           if(father[f1]>'Z'||father[f1]<'A')  {first[p1][t1]=father[f1];t1++;}
        first[p1][t1]='}';
        f1=0;
        f2=-1;
        t1=3;
        p1++;
      }
   }
   printf("FIRST:\n");
   x=0;
   y=0;
   for(x=0;x<p1;x++)
     { while(first[x][y]!='\0')
        {  printf("%c",first[x][y]);
           y++; 
         }
       printf("\n");
       y=0; 
      }   
   getch();
}
     

⌨️ 快捷键说明

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