码迷,mamicode.com
首页 > 其他好文 > 详细

词法分析

时间:2016-10-01 00:30:26      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char prog[80],token[8],ch;
int syn,p,m,n,sum;
char *rwtab[6]={"begin","if","then","while","do","end"};
 scaner();
main()
{p=0;
 printf("\n please input a string(end with ‘#‘):/n");
 do{
    scanf("%c",&ch);
    prog[p++]=ch;
    }while(ch!=#);
 p=0;
 do{
    scaner();
    switch(syn)
     {case 11:printf("( %-10d%5d )\n",sum,syn);
          break;
      case -1:printf("you have input a wrong string\n");
          getchar();
          exit(0);
      default: printf("( %-10s%5d )\n",token,syn);
          break;
      }
    }while(syn!=0);
    getchar();
 }
 
 scaner()
 {  sum=0;
    for(m=0;m<8;m++)token[m++]=NULL;
    ch=prog[p++];
    m=0;
    while((ch== )||(ch==\n))ch=prog[p++];
    if(((ch<=z)&&(ch>=a))||((ch<=Z)&&(ch>=A)))
      { while(((ch<=z)&&(ch>=a))||((ch<=Z)&&(ch>=A))||((ch>=0)&&(ch<=9)))
      {token[m++]=ch;
       ch=prog[p++];
      }
      p--;
      syn=10;
      for(n=0;n<6;n++)
    if(strcmp(token,rwtab[n])==0)
       { syn=n+1;
         break;
       }
      }
    else if((ch>=0)&&(ch<=9))
      { while((ch>=0)&&(ch<=9))
    { sum=sum*10+ch-0;
      ch=prog[p++];
    }
    p--;
    syn=11;
      }
    else switch(ch)
    { case <:token[m++]=ch;
          ch=prog[p++];
           if(ch===)
            {  syn=22;
               token[m++]=ch;
            }
          else
            {  syn=20;
               p--;
            }
          break;
     case >:token[m++]=ch;
          ch=prog[p++];
          if(ch===)
            { syn=24;
              token[m++]=ch;
            }
          else
            { syn=23;
              p--;
            }
          break;
     case +: token[m++]=ch;
          ch=prog[p++];
          if(ch==+)
            { syn=17;
              token[m++]=ch;
            }
          else
            { syn=13;
              p--;
            }
          break;
 
     case -:token[m++]=ch;
          ch=prog[p++];
          if(ch==-)
            { syn=29;
              token[m++]=ch;
            }
          else
            { syn=14;
              p--;
            }
          break;
 
     case !:ch=prog[p++];
          if(ch===)
           { syn=21;
             token[m++]=ch;
           }
          else
          { syn=31;
             p--;
          }
          break;
 
     case =:token[m++]=ch;
          ch=prog[p++];
          if(ch===)
            { syn=25;
              token[m++]=ch;
            }
          else
            { syn=18;
              p--;
            }
          break;
     case *: syn=15;
           token[m++]=ch;
           break;
     case /: syn=16;
           token[m++]=ch;
           break;
     case (: syn=27;
           token[m++]=ch;
           break;
     case ): syn=28;
           token[m++]=ch;
           break;
     case {: syn=5;
           token[m++]=ch;
           break;
     case }: syn=6;
           token[m++]=ch;
           break;
     case ;: syn=26;
          token[m++]=ch;
          break;
     case \": syn=30;
           token[m++]=ch;
           break;
     case #: syn=0;
           token[m++]=ch;
           break;
     case ::syn=17;
           token[m++]=ch;
           break;
    default: syn=-1;
         break;
       }
    token[m++]=\0;
    }

 

词法分析

标签:

原文地址:http://www.cnblogs.com/AAAAAAAA/p/5925045.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!