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

📄 1111.txt

📁 一个类PASCAL语言的词法分析器完成的较粗糙.
💻 TXT
字号:
#include<stdio.h>

#define keylen 10
#define identlen 10
void main()
{ 
 char tstring[identlen];
 struct outreco{int ty;
                int point;
                  }outtoken;
 int cip,ip,pint,i,j,l,m,errorx,num,b,cp;
 char charl;
 int ci[10];
 char k[keylen][keylen];
 char id[100][identlen];
 char token[identlen];

 char instring[10];
  
 printf("input key:\n");
 for(i=0;i<identlen;i++) 
 {scanf("%s",k[i]);} 
 printf("!!!!!!!\n");
 ip=0;cp=0;




 while((charl=getchar())==' ') {}
 while(charl!='#')
 {while(charl==' ') {charl=getchar();}  
 if(64<charl<91||96<charl<123)  /*以字符开头*/
   {m=0;
    while(64<charl<91||96<charl<123||48<charl<58)   /*处理标识符*/
    {token[m]=charl;m++;charl=getchar();}  // 取字符串
    l=0;b=0;
    while(l<keylen&&b==0) {b=1;i=0;
                            while (i<identlen&&b==1)
                            {if(k[l][i]==token[i]) i++;
                             else b=0;
                            }
                              if(b==0) l=l+1;
                            
                           }
     if(l<keylen) 
         {outtoken.ty=1;outtoken.point=l;printf("%d  %d",outtoken.ty,outtoken.point);}
     else
      {l=0;
       b=0;
       while(l<ip&&b==0 ) 
       {       
        b=1;
        i=0;
        while(i<identlen&&b==1)   // 判断是否在以有的标示符数组中,即是否出现
             {      if (id[l][i]=token[i])
                        i=i+1;
                    else b=0;
              }
           if(b==0)  l=l+1;
        }
       


       if(l>=ip)
       {ip=ip+1;
        for(m=0;m<identlen;m++)
         {id[ip][m]=token[m];}
          outtoken.ty=6;
          outtoken.point=l; 
          printf("%d  %d",outtoken.ty,outtoken.point);
        }

      }    
   }
else if(48<charl<58)
    {m=0;i=0;j=0;
     while(48<charl<58)
          {token[m]=charl;
           charl=getchar();
           j=(int)charl-48;
           for(b=0;b<=m;b++) {j=10*j;}
           i=j+i;
           m++;
           }
      l=0;
            
   
          
                 
      while(l<cp&&i!=ci[l])    //判断是否在以有的常数数组中,即是否出现过
           l=l+1;
             
               
      if(l>cp)  // 没出现过
      {ci[l]=i;cp++;}    //  放入
    }
           
    /*  else if(39<charl<46||charl==47||)
             {switch(char1)
                 case','  outtoken.ty:='2';
                          outtoken.point:=0;
                 case';'  outtoken.ty:='2';
                          outtoken.point:=1;
                 case'.'  outtoken.ty:='2';
                          outtoken.point:=2;
                 case'='  outtoken.ty:='2';
                          outtoken.point:=3;
                 case'('  outtoken.ty:='2';
                          outtoken.point:=4;
                 case')'  outtoken.ty:='2';
                          outtoken.point:=5;      
            
                 case'<'  outtoken.ty:='4';
                          outtoken.point:=0;
                 case'<='  outtoken.ty:='4';
                          outtoken.point:=1;
                 case'='  outtoken.ty:='4';
                          outtoken.point:=2;
                 case'>'  outtoken.ty:='4';
                          outtoken.point:=3;
                 case'>='  outtoken.ty:='4';
                          outtoken.point:=4;
                 case'<>'  outtoken.ty:='4';
                          outtoken.point:=5;
                 case'+'  outtoken.ty:='5';
                          outtoken.point:=0;
                 case'-'  outtoken.ty:='5';
                          outtoken.point:=1;
                 case'*'  outtoken.ty:='5';
                          outtoken.point:=2;
                 case'/'  outtoken.ty:='5';
                          outtoken.point:=3;
              }        */

else printf("error!\n");
}

}   








⌨️ 快捷键说明

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