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

📄 c++分析.txt

📁 一个编译原理程序
💻 TXT
字号:
#include <stdio.h>
#include<string.h>
#include<ctype.h>
#define BUFFMAXLEN 100
FILE *out;
char token[20],s[20],filename[25],outfile[25],ch;
char blank[33][10]={"auto","break","case","char","const","continue","default",
   "do","double","else","enum","extern","float","for","goto",
   "if","int","long","register","return","short","signed","sizeof",
   "static","struct","switch","typedef","union","unsigned",
   "void","volatile","while"};
void getbe()
    {int readchar(char *ch);
      while(isspace(ch))
 ch=readchar(filename);
    }
void concatenation(char ch)
    {
strcat(token,&ch);
    }
void error()
     {
      if(ch!=-1)
 fputs("\nyour input a data ERROR!",out);
     }
int reserve()
   {int i,m=0;
    for(i=0;i<=31;i++)
{ if(strcmp(token,blank[i])==0)m=1;
}return(m);

   }
int readchar(char * filename)
{
      static FILE *fp = NULL;
      static char buff[BUFFMAXLEN];
      static int bufflen = 0;
      static int buffpos = -1;
      if (fp == NULL)
      {
              if ((fp = fopen(filename,"r")) == NULL)
              {
                      printf("File open error!\n");
                      return 0;
              }
      }
      if (buffpos == -1)
      {
              if (feof(fp))
              {
                      fclose(fp);
                      return -1;
              }
              bufflen = fread(buff,sizeof(char),BUFFMAXLEN,fp);
              buffpos = 0;
      }
      if (buffpos < bufflen)
              ch =  buff[buffpos++];
      if (buffpos >= bufflen)
              buffpos = -1;
      return ch;
}

void main()
{
int c,k=0;
char b=' ';
printf("\nPlease input filename:");
      scanf("%s",filename);
printf("\nPlease input outfile name:");
      scanf("%s",outfile);
if((out=fopen(outfile,"w"))==NULL)
    {printf("\ncannot open outfile file!");
      
    }
      ch = b;
while(ch != -1 && ch != 0)
     { strcpy(token,s);
if(k==0)ch=readchar(filename);
   else {ch=b;k=0;}

getbe();
if(isalpha(ch))
 {while(isalnum(ch))
{
  concatenation(ch);
  b=ch=readchar(filename);k=1;
}
   c=reserve();
    if(c==1)fprintf(out,"\n< %s ,_ >",token);
    else fprintf(out,"\n< ident ,\"%s\" >",token);
 }
 else
    {if(isdigit(ch))
{while(isdigit(ch))
     {
concatenation(ch);
b=ch=readchar(filename);k=1;
     }
fprintf(out,"\n< const ,%s >",token); }
     else
 switch(ch)
 { case '+': b=ch=readchar(filename);
     if(ch=='+')fputs("\n< ++ , _>",out);
     else {fputs("\n< + ,_ >",out);k=1;}
     break;
   case '-': b=ch=readchar(filename);
     if(ch=='-')fputs("\n< -- , EQ>",out);
     else {fputs("\n< - ,_ >",out);k=1;}
     break;
   case '*': fputs("\n< * ,null >",out);break;
   case '<': b=ch=readchar(filename);
     if(ch=='=')fputs("\n< <= , LE>",out);
     else {fputs("\n< < ,LT >",out);k=1;}
      break;
   case '=': b=ch=readchar(filename);
     if(ch=='=')fputs("\n< == , EQ>",out);
     else {fputs("\n< = ,_ >",out);k=1;}
     break;
   case '>': b=ch=readchar(filename);
     if(ch=='=')fputs("\n< >= ,RE >",out);
      else {fputs("\n< > ,RT >",out);k=1;}
                    case '&': b=ch=readchar(filename);
     if(ch=='&')fputs("\n< && , _>",out);
     else {fputs("\n< & ,_ >",out);k=1;}
     break;
   case '|': b=ch=readchar(filename);
     if(ch=='|')fputs("\n< ||, _>",out);
     else {fputs("\n< | ,_ >",out);k=1;}
     break;
                   case '!': b=ch=readchar(filename);
     if(ch=='=')fputs("\n< != , _>",out);
     else {fputs("\n< ! ,_ >",out);k=1;}
     break;
   case ':': fputs("\n< : ,_ >",out);break;
   case ',': fputs("\n< , ,_ >",out);break;
   case ';': fputs("\n< ; ,_ >",out);break;
   case '(': fputs("\n< ( ,_ >",out);break;
   case ')': fputs("\n< ) ,_ >",out);break;
   case '{': fputs("\n< { ,_ >",out);break;
   case '}': fputs("\n< } ,_ >",out);break;
   case '[': fputs("\n< [ ,_ >",out);break;
   case ']': fputs("\n< ] ,_ >",out);break;
   case '"': fputs("\n< \",_ >",out);break;
   case '#': fputs("\n< # ,_ >",out);break;
   case '\\': fputs("\n< \\ ,_ >",out);break;
   case '%': fputs("\n< % ,_ >",out);break;
   case '.': fputs("\n< . ,_ >",out);break;
   case '\'': fputs("\n< ' ,_ >",out);break;
  
   case '?': fputs("\n< ? ,_ >",out);break;
   case '^': fputs("\n< ^ ,_ >",out);break;
    default:
 error();
   }

}
     }
  fclose(out);
}



 




 

⌨️ 快捷键说明

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