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

📄 cifa.c

📁 编译原理中
💻 C
字号:
           #include   <stdio.h>   
#include   <string.h>
#include   <ctype.h>
#include   <malloc.h>
#define   N   50
#define   M   500
    
char   *a[8]={"if","int","for","while","do","return","break","continue"};
char   *b[9]={"/","+","-","*","<","=","<=","!="," "};
char   *c[6]={"{","}","(",")",",",";"};
    
char   scmp(char   *str)                           /*此函数判断单词类型*/
{
        int   i;   
        for(i=0;i<8;i++)
        {   
              if(strcmp(str,a[i])==0)   
              return   '1';   
        }   

        if(isdigit(str[0]))
        return   '3';   
        for(i=0;i<9;i++)
        {   
              if(strcmp(str,b[i])==0)   
              return   '4';   
        }   

        for(i=0;i<6;i++)
        {   
              if(strcmp(str,c[i])==0)   
              return   '5';   
        }   
        if(!isalnum(str[0]))   
               return   '5';
        else   return   '2';

}
    
void   main(void)
{
        FILE   *in,*out,*fp;   
        char   ch,cha,buffer[N],*zhou[M];   
        int   i=0,j=0,k;   
        if((in=fopen("daizj.txt","r+"))==NULL)
        {   
              printf("yxcinput.txt   can't   open   or   doesn't   exist...\n");
              getch();
              exit(0);   
        }   
        if((out=fopen("output.txt","w+"))==NULL)
        {   
              printf("output   file   can   not   open...\n");
              getch();
              exit(0);   
        }   

        while(!feof(in))   
        {   
              ch=fgetc(in);   
              if(isalpha(ch))                                         /*如果首字符是字母*/   
              {   
                    while(isalnum(ch)&&(i<N))   
                    {   
                          buffer[i++]=ch;   
                          ch=fgetc(in);   
                    }   
                    if(i>=N)   
                    {   
                          printf("the   string   is   too   long...\n");   
                          getch();exit(0);   
                    }   
                    buffer[i]='\0';   
                    zhou[j++]=(char   *)malloc(sizeof(char)*(strlen(buffer)+1));   
                    strcpy(zhou[j-1],buffer);   
                    i=0;   
                    fseek(in,-1L,1);   
              }   
              else   if(isdigit(ch))                             /*如果首字符是数字*/   
              {   
                    while(isdigit(ch)&&(i<N))   
                    {   
                          buffer[i++]=ch;   
                          ch=fgetc(in);   
                    }   
                    if(i>=N)   
                    {   
                          printf("the   digit   is   too   long...\n");   
                          getch();exit(0);   
                    }   
                    buffer[i]='\0';   
                    zhou[j++]=(char   *)malloc(sizeof(char)*(strlen(buffer)+1));   
                    strcpy(zhou[j-1],buffer);   
                    i=0;   
                    fseek(in,-1L,1);   
              }   
              else   if(!isalnum(ch))                               /*如果首字符既不是数字也不是字母的话*/   
              {   
                    if(ch!='\n'&&ch!='')
                    {   
                          if(ch=='<'||ch=='!')                     /*   以下代码实现超前搜索   */
                          {   
                                if((cha=fgetc(in))=='=')   
                                {   
                                      buffer[i++]=ch;   
                                      buffer[i++]=cha;buffer[i]='\0';   
                                      zhou[j++]=(char   *)malloc(sizeof(char)*3);   
                                      strcpy(zhou[j-1],buffer);   
                                      i=0;   
                                }   
                                else   
                                {   
                                      buffer[i++]=ch;buffer[i]='\0';   
                                      zhou[j++]=(char   *)malloc(sizeof(char)*2);   
                                      strcpy(zhou[j-1],buffer);   
                                      i=0;   
                                      fseek(in,-1L,1);   
                                }   
                          }   
                          else   if(ch=='+'||ch=='-'||ch=='=')
                          {   
                                if((cha=fgetc(in))==ch)   
                                {   
                                    buffer[i++]=ch;buffer[i++]=cha;buffer[i]='\0';   
                                    zhou[j++]=(char   *)malloc(sizeof(char)*3);   
                                    strcpy(zhou[j-1],buffer);   
                                    i=0;   
                                }   
                                else   
                                {   
                                      buffer[i++]=ch;buffer[i]='\0';   
                                      zhou[j++]=(char   *)malloc(sizeof(char)*2);   
                                      strcpy(zhou[j-1],buffer);   
                                      i=0;   
                                      fseek(in,-1L,1);   
                                }   
                          }   
                          else   
                          {   
                                buffer[i++]=ch;buffer[i]='\0';   
                                zhou[j++]=(char   *)malloc(sizeof(char)*2);   
                                strcpy(zhou[j-1],buffer);   
                                i=0;   
                          }   
                    }   
              }   
        }   

    
    
      for(i=0;i<j-1;i++)               /*输出到文件*/   
      {   
          puts(zhou[i]);   
          cha=scmp(zhou[i]);   
          fputc('(',out);   
          fputc(cha,out);   
          fputc(',',out);   
          fputs(zhou[i],out);   
          fputc(')',out);   
          fputc('\n',out);   
      }   
      getch();   
      return;   
  }

⌨️ 快捷键说明

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