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

📄 cifafenxiqi.txt

📁 能够识别数字
💻 TXT
字号:
/*词法分析*/   
  #include   <stdio.h>   
  #include   <ctype.h>   
  #include   <string.h>   
  #define   NULL   0   
    
  FILE   *fp;   
  char   cbuffer;   
  char   *key[8]={"if","else","for","while","do","return","break","main"};   
  char   *border[6]={",",";","{","}","(",")"};   
  char   *arithmetic[4]={"+","-","*","/"};   
  char   *relation[6]={"<","<=","=",">",">=","<>"};   
  char   *consts[20];   
  char   *label[20];   
    
  int   constnum=0,labelnum=0;   
    
  int   search(char   searchchar[],int   wordtype)       //搜索   
  {   
            int   i=0;   
            switch   (wordtype)   {   
                case   1:for   (i=0;i<=7;i++)   
      {   
        if   (strcmp(key[i],searchchar)==0)   
            return(i+1);   
      }   
                case   2:{for   (i=0;i<=5;i++)   
      {   
        if   (strcmp(border[i],searchchar)==0)   
              return(i+1);   
      }         //       return(0);   
              }   
    
                case   3:{for   (i=0;i<=3;i++)   
      {   
        if   (strcmp(arithmetic[i],searchchar)==0)   
              {   
                return(i+1);   
              }   
      }   
              return(0);   
              }   
    
                case   4:{for   (i=0;i<=5;i++)   
      {   
        if   (strcmp(relation[i],searchchar)==0)   
              {   
                return(i+1);   
              }   
      }   
                return(0);   
              }   
    
                case   5:   
        
      for   (i=0;i<constnum;i++)       
      if   (strcmp(consts[i],searchchar)==0) return(i+1);             
                  consts[i]=new   char   [sizeof(searchchar)];   
      strcpy(consts[i],searchchar);   
              constnum++;   
              return(i);   
                
    
                case   6:   
        for   (i=0;i<labelnum;i++)     
        if   (strcmp(label[i],searchchar)==0) return(i+1);   
                        
        label[i]=new   char   [sizeof(searchchar)];   
      strcpy(label[i],searchchar);   
              labelnum++;   
              return(i);   
              
    
              }   
    
                  return   0;   
  }   
    
    
  char   alphaprocess(char   buffer)   
  {   
              int   atype;   
              int   i=0;   
              char   alphatp[20];   
              while   ((isalpha(buffer))||(isdigit(buffer)))   
          {   
          alphatp[++i]=buffer;   
          buffer=fgetc(fp);   
          }   
              alphatp[i+1]='\0';   
              if   (atype=search(alphatp,1))   
  //   printf("%s   (1,%d)\n",alphatp,atype-1);   
              
      printf("(%s   ,   1)\n",alphatp);     
      else   
    {   
    atype=search(alphatp,6);   
    printf("(%s   ,   6)\n",alphatp);   
    }   
              return(buffer);   
  }   
    
  char   digitprocess(char   buffer)   
  {   
              int   i=-1;   
              char   digittp[20];   
              int   dtype;   
              while   ((isdigit(buffer)))   
          {   
          digittp[++i]=buffer;   
          buffer=fgetc(fp);   
          }   
              digittp[i+1]='\0';   
              dtype=search(digittp,5);   
              printf("(%s     ,   5)\n",digittp);   
              return(buffer);   
  }   
    
  char   otherprocess(char   buffer)   
  {   
    
              int   i=-1;   
              char   othertp[20];   
              int   otype,otypetp;   
              othertp[0]=buffer;   
              othertp[1]='\0';   
              if   (otype=search(othertp,3))   
    {   
    printf("(%s   ,   3)\n",othertp);   
    buffer=fgetc(fp);   
    goto   out;   
    }   
    
              if   (otype=search(othertp,4))   
              {   
              buffer=fgetc(fp);   
              othertp[1]=buffer;   
              othertp[2]='\0';   
              if   (otypetp=search(othertp,4))   
    {   
    printf("(%s   ,   4)\n",othertp);   
    goto   out;   
    }   
              else   
    othertp[1]='\0';   
    printf("(%s     ,   4)\n",othertp);   
    goto   out;   
              }   
    
              if   (buffer==':')   
              {   
              buffer=fgetc(fp);   
              if   (buffer=='=')   
    printf("(:=   ,   2)\n");   
    buffer=fgetc(fp);   
    goto   out;   
              }   
        else   
              {   
              if   (otype=search(othertp,2))   
    {   
    printf("(%s   ,   2)\n",othertp);   
    buffer=fgetc(fp);   
    goto   out;   
    }   
              }   
    
  //     if   ((buffer!='\n')&&(buffer!='   '))   
  //     printf("%c   error,not   a   word\n",buffer);   
      buffer=fgetc(fp);   
  out:             return(buffer);   
  }   
    
    
    
  void   main()   
  {   
            int   i;   
              for   (i=0;i<=20;i++)   
      {   
        label[i]=NULL;   
        consts[i]=NULL;   
      };   
              if   ((fp=fopen("in.txt","r"))==NULL)   
    printf("error");   
              else   
  {   
  cbuffer   =   fgetc(fp);   
  while   (cbuffer!=EOF)   
    {   
      if   (isalpha(cbuffer))   
            cbuffer=alphaprocess(cbuffer);   
      else   if   (isdigit(cbuffer))   
            cbuffer=digitprocess(cbuffer);   
      else   cbuffer=otherprocess(cbuffer);   
      }   
    printf("over\n");   
    getchar();   
    }   
  }   
 

⌨️ 快捷键说明

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