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

📄 cfanalysist.c

📁 实现了 词法编译器的功能 在编译成序的 过程中
💻 C
字号:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
void MakeStrSpace(char str[50])
{
  int i;
  for(i = 0;i<50;i++){
    str[i]='';
  }
}
int main(void)
{
  char *KeyWords[9] = {
                     "int","if","do","while","break","return","continue",
                     "for","printf"
                     };
  char ch;
  char str[50],*filename;
  FILE *fp;
  int i,j=0;
  int k=0;
  int m;
  printf("Enter <filename>:");
  scanf("%s",filename);
  if((fp = fopen(filename,"r")) == NULL){
    printf("Cannot Open File:<%s>",filename);
    getch();
    exit(1);
  }

  ch = getc(fp);
   while(ch!=EOF){
   while(isspace(ch)&&ch != EOF){
      ch = getc(fp);
    }
    if(isdigit(ch)&&ch != EOF){
      while(isdigit(ch)&&ch != EOF){
        str[j++] = ch;
        ch = getc(fp);
      }
      printf("(3,%s)\n",str);
      MakeStrSpace(str);
      j=0;
    }

    while(isspace(ch)&&ch != EOF){
      ch = getc(fp);
    }

    if(ch == '\"'&&ch != EOF){
      str[j++]=ch;
      ch = getc(fp);
      /*while(ch!='\"'&&ch!=EOF){
      str[j++]=ch;
      ch=getc(fp);
      }*/
      /*str[j] = '"';*/
      if(ch=='\"'){
      ch=getc(fp);
      }
      printf("(6,%s)\n",str);
      MakeStrSpace(str);
      j=0;
    }

    while(isspace(ch)&&ch != EOF){
      ch = getc(fp);
    }
    switch(ch)
    {
      case '+':
        printf("(4,+)\n");
        ch = getc(fp);
        break;
      case '-':
        printf("(4,-)\n");
        ch = getc(fp);
        break;
      case '*':
        printf("(4,*)\n");
        ch = getc(fp);
        break;
      case '/':
        printf("(4,/)\n");
        ch = getc(fp);
        break;
      case '{':
        printf("(5,{)\n");
        ch = getc(fp);
        break;
      case '}':
        printf("(5,})\n");
        ch = getc(fp);
        break;
      case  '(':
        printf("(5,()\n");
        ch = getc(fp);
        break;
      case ')':
        printf("(5,))\n");
        ch = getc(fp);
        break;
      case ',':
        printf("(5,,)\n");
        ch = getc(fp);
        break;
      case ';':
        printf("(5,;)\n");
        ch = getc(fp);
        break;
      case '=':
        ch = getc(fp);
        if(ch == '='){
           printf("(4,==)\n");
           ch = getc(fp);
        }
        else{
          printf("(4,=)\n");
          ch = getc(fp);
        }
        break;
      case '>':
        ch = getc(fp);
        if(ch == '='){
          printf("(4,>=)\n");
          ch = getc(fp);
        }
        else{
          printf("(4,>)\n");
          ch = getc(fp);
        }
        break;
      case '<':
        ch  = getc(fp);
        if(ch == '='){
          printf("(4,<=)\n");
          ch = getc(fp);
        }
        else{
          printf("(4,<)");
          ch = getc(fp);
        }
        break;
      case '!':
        ch=getc(fp);
        if(ch=='=')
        {printf("(4,!=)\n");
        ch=getc(fp);
        }
         else {printf("error!\n");
         ch=getc(fp);
         }
         break;

      default:
        if(ch !=EOF){
          str[j++] = ch;
          ch = getc(fp);
          while(ch !=' '&&ch != EOF){
            str[j++] = ch;
            ch = getc(fp);
          }

          for(i = 0;i < 9;i++){
            if(!strcmp(str,KeyWords[i])){
              printf("(1,%s)\n",str);
              k = 1;
              break;
            }

          }
          if(k ==1){
            k =0;
          }
          else{
            printf("(2,%s)\n",str);
          }
          getch();
          MakeStrSpace(str);
          j=0;
        }
        break;
    }
  }

  fclose(fp);
  getch();

  return 0;

}

⌨️ 快捷键说明

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