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

📄 12.cpp

📁 针对几种语言的词法分析的一点东东! 望接纳!
💻 CPP
字号:
# define N 20
# include <stdio.h>
# include <string.h>
int a,b;
 main()
{ int szt[N];
  char str[N];
  int *top;
  char ch;
  int act[12][9]={
   {5,-1,-1,4,-1,-1,1,2,3},
   {-1,6,-1,-1,-1,0,-1,-1,-1},
   {-1,22,7,-1,22,22,-1,-1,-1},
   {-1,24,24,-1,24,24,-1,-1,-1},
   {5,-1,-1,4,-1,-1,8,2,3},
   {-1,26,26,-1,26,26,-1,-1,-1},
   {5,-1,-1,4,-1,-1,-1,9,3},
   {5,-1,-1,4,-1,-1,-1,-1,10},
   {-1,6,-1,-1,11,-1,-1,-1,-1},
   {-1,21,7,-1,21,21,-1,-1,-1},
   {-1,23,23,-1,23,23,-1,-1,-1},
   {-1,25,25,-1,25,25,-1,-1,-1}};
int s=1,i,j,n=0;
clrscr();
  str[n]='#';
printf("Please input a string:\n");
  do
{  n=n+1;
  str[n]=getchar();

}while(str[n]!='#');
    ch=str[1];
    szt[0]=0;
    i=0;
    j=1;
    top=&szt[0];
    a=change(ch);
    b=0;
    s=act[b][a];
   while(s!=0)
  {  
    printf("%-5d%c\n",szt[i],ch);
       s=act[b][a];
    switch(s)
   { 
 case 0:break;
 case 4:i=i+1;
        szt[i]=4;
        j=j+1;
     ch=str[j];
     a=change(ch);
     ++top;
        b=4;
     break;
     case 5:i=i+1;
            szt[i]=5;
            j=j+1;
            ch=str[j];
            a=change(ch);
            ++top;
            b=5;
            break;
     case 6:i=i+1;
            szt[i]=6;
            j=j+1;
            ch=str[j];
            a=change(ch);
            ++top;
            b=6;
            break;
     case 7:i=i+1;
            szt[i]=7;
            j=j+1;
            ch=str[j];
            a=change(ch);
            ++top;
   b=7;
            break;
    case 11:i=i+1;
            szt[i]=11;
            j=j+1;
            ch=str[j];
            a=change(ch);
            ++top;
   b=11;
            break;
     case 21:ch='E';
             i=i-3;
             b=szt[i];
    a=change(ch);
             i=i+1;
             szt[i]=act[b][a];
             top=top-2;
             *top=act[b][a];
             b=*top;
             ch=str[j];
             a=change(ch);
             break;
     case 22:ch='E';
             b=szt[i-1];
             a=change(ch);
             *top=act[b][a];
             b=*top;
             ch=str[j];
             a=change(ch);
              break;
     case 23:ch='T';
             i=i-3;
             b=szt[i];
             a=change(ch);
             i=i+1;
             szt[i]=act[b][a];
             top=top-2;
             *top=act[b][a];
             b=*top;
             ch=str[j];
             a=change(ch);
             break;
     case 24:ch='T';
             b=szt[i-1];
             a=change(ch);
             *top=act[b][a];
             b=*top;
             ch=str[j];
             a=change(ch);
             break;
    case 25:ch='F';
            i=i-3;
            b=szt[i];
   a=change(ch);
            i=i+1;
      szt[i]=act[b][a];
            top=top-2;
            *top=act[b][a];
            b=*top;
            ch=str[j];
         a=change(ch);
            break;
     case 26:ch='F';
              b=szt[i-1];
              a=change(ch);
              *top=act[b][a];
              b=*top;
              ch=str[j];
              a=change(ch);
              break;
   default:printf("error!\n");
   }
}
    if(ch=='#')
         printf("Success!");
    else printf("fail!");
getch();
}
int change(char x)
{ int m;
  if(x=='i')  m=0;
 else if(x=='+')  m=1;
 else if(x=='*')  m=2;
 else if(x=='(')  m=3;
 else if(x==')')  m=4;
 else if(x=='#')  m=5;
 else if(x=='E')  m=6;
 else if(x=='T')  m=7;
 else if(x=='F')  m=8;
 else printf("error!\n");
 return(m);
}

⌨️ 快捷键说明

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