美元主权债券是什么:c语言词法分析器 - fertiland的专栏 - CSDNBlog

来源:百度文库 编辑:中财网 时间:2024/04/27 15:41:47

   ch=fgetc(input);
   token[i]=‘\0‘;
   count++;fprintf(output,"%4d\t(左括号运算符\t,%-16s)\t%4d\n",count,token,i);
   continue;
   }
  else if(ch==‘[‘)
   {
   token[i++]=ch;
   ch=fgetc(input);
   token[i]=‘\0‘;
   count++;fprintf(output,"%4d\t(右中括号运算符\t,%-16s)\t%4d\n",count,token,i);
   continue;
   }
  else if(ch==‘]‘)
   {
   token[i++]=ch;
   ch=fgetc(input);
   token[i]=‘\0‘;
   count++;fprintf(output,"%4d\t(左中括号运算符\t,%-16s)\t%4d\n",count,token,i);
   continue;
   }
  else if(ch==‘-‘)
   {
   token[i++]=ch;
   ch=fgetc(input);
   if(ch==‘-‘)
    {
    token[i++]=ch;
    token[i]=‘\0‘;
    count++;fprintf(output,"%4d\t(自加运算符\t,%-16s)\t%4d\n",count,token,i);
    ch=fgetc(input);
    continue;
    }
   else if (ch==‘>‘)
    {
    token[i++]=ch;
    token[i]=‘\0‘;
    count++;fprintf(output,"%4d\t(指针运算符\t,%-16s)\t%4d\n",count,token,i);
    ch=fgetc(input);
    continue;
    }
   token[i]=‘\0‘;
   count++;fprintf(output,"%4d\t(负运算符\t,%-16s)\t%4d\n",count,token,i);
   continue;
   }
  else if(ch==‘.‘)
   {
   token[i++]=ch;
   ch=fgetc(input);
   token[i]=‘\0‘;
   count++;fprintf(output,"%4d\t(点运算符\t,%-16s)\t%4d\n",count,token,i);
   continue;
   }
  else if(ch==‘&‘)  
   {
   token[i++]=ch;
   ch=fgetc(input);
   token[i]=‘\0‘;
   count++;fprintf(output,"%4d\t(地址与运算符\t,%-16s)\t%4d\n",count,token,i);
   continue;   
   }
  else if(ch==‘!‘)  
   {
   token[i++]=ch;
   ch=fgetc(input);
   if(ch==‘=‘)
    {
    token[i++]=ch;
    token[i]=‘\0‘;
    count++;fprintf(output,"%4d\t(不等于比较符\t,%-16s)\t%4d\n",count,token,i);
    ch=fgetc(input);
    continue;
    }
   token[i]=‘\0‘;
   count++;fprintf(output,"%4d\t(取反运算符\t,%-16s)\t%4d\n",count,token,i);
   continue;   
   }
  else if(ch==‘~‘)  
   {
   token[i++]=ch;
   ch=fgetc(input);
   token[i]=‘\0‘;
   count++;fprintf(output,"%4d\t(按位运算符\t,%-16s)\t%4d\n",count,token,i);
   continue;   
   }
  else if(ch==‘*‘)
   {
   token[i++]=ch;
   ch=fgetc(input);
   token[i]=‘\0‘;
   count++;fprintf(output,"%4d\t(乘运算符\t,%-16s)\t%4d\t\n",count,token,i);
   continue;   
   }
  else if(ch==‘%‘)  
   {
   token[i++]=ch;
   ch=fgetc(input);
   token[i]=‘\0‘;
   count++;fprintf(output,"%4d\t(求余运算符\t,%-16s)\t%4d\n",count,token,i);
   continue;   
   }
  else if(ch==‘/‘)  
   {
   token[i++]=ch;
   ch=fgetc(input);
   token[i]=‘\0‘;
   count++;fprintf(output,"%4d\t(除法运算符\t,%-16s)\t%4d\t\n",count,token,i);
   continue;   
   }  
  else if(ch==‘<‘)
   {
   token[i++]=ch;
   ch=fgetc(input);
   if(ch==‘=‘)
    {
    token[i++]=ch;
    token[i]=‘\0‘;
    count++;fprintf(output,"%4d\t(小于等于比较符\t,%-16s)\t%4d\n",count,token,i);
    ch=fgetc(input);
    continue;
    }
   if(ch==‘<‘)
    {
    token[i++]=ch;
    token[i]=‘\0‘;
    count++;fprintf(output,"%4d\t(左移运算符\t,%-16s)\t%4d\t\n",count,token,i);
    ch=fgetc(input);
    continue;
    }
   token[i]=‘\0‘;
   count++;fprintf(output,"%4d\t(小于比较符\t,%-16s)\t%4d\n",count,token,i);
   continue;
   }
  else if(ch==‘>‘)
   {
   token[i++]=ch;
   ch=fgetc(input);
   if(ch==‘=‘)
    {
    token[i++]=ch;
    token[i]=‘\0‘;
    count++;fprintf(output,"%4d\t(大于等于比较符\t,%-16s)\t%4d\n",count,token,i);
    ch=fgetc(input);
    continue;
    }
   if(ch==‘>‘)
    {
    token[i++]=ch;
    token[i]=‘\0‘;
    count++;fprintf(output,"%4d\t(右移运算符\t,%-16s)\t%4d\n",count,token,i);
    ch=fgetc(input);
    continue;
    }
   token[i]=‘\0‘;
   count++;fprintf(output,"%4d\t(大于比较符\t,%-16s)\t%4d\n",count,token,i);
   continue;
   }
  else if(ch==‘=‘)
   {
   token[i++]=ch;
   ch=fgetc(input);
   if(ch==‘=‘)
    {
    token[i++]=ch;
    token[i]=‘\0‘;
    count++;fprintf(output,"%4d\t(等于比较符\t,%-16s)\t%4d\n",count,token,i);
    ch=fgetc(input);
    continue;
    }
   token[i]=‘\0‘;
   count++;fprintf(output,"%4d\t(赋值运算符\t,%-16s)\t%4d\n",count,token,i);
   continue;
   }
  else if(ch==‘,‘)
   {
   token[i++]=ch;
   ch=fgetc(input);
   token[i]=‘\0‘;
   count++;fprintf(output,"%4d\t(逗号界符\t,%-16s)\t%4d\n",count,token,i);
   continue;
   } 
  else if(ch==‘;‘)
   {
   token[i++]=ch;
   ch=fgetc(input);
   token[i]=‘\0‘;
   count++;fprintf(output,"%4d\t(分号界符\t,%-16s)\t%4d\n",count,token,i);
   continue;
   }
  
  else if(ch==‘{‘)
   {
   token[i++]=ch;
   ch=fgetc(input);
   token[i]=‘\0‘;
   count++;fprintf(output,"%4d\t(边界运算符\t,%-16s)\t%4d\n",count,token,i);
   continue;
   }
  else if(ch==‘}‘)
   {
   token[i++]=ch;
   ch=fgetc(input);
   token[i]=‘\0‘;
   count++;fprintf(output,"%4d\t(边界运算符\t,%-16s)\t%4d\n",count,token,i);
   continue;
   }
  else if(ch==‘+‘)
   { 
   token[i++]=ch;
   ch=fgetc(input);
   if(ch==‘+‘)
    {
    token[i++]=ch;
    token[i]=‘\0‘;
    count++;fprintf(output,"%4d\t(自加运算符\t,%-16s)\t%4d\n",count,token,i);
    ch=fgetc(input);
    continue;
    }
   token[i]=‘\0‘;
   count++;fprintf(output,"%4d\t(加运算符\t,%-16s)\t%4d\n",count,token,i);
   continue;
   }
  else if(ch==‘"‘)
   { 
   token[i++]=ch;
   ch=fgetc(input);
   while(ch!=‘"‘&&ch!=EOF)
    {
    token[i++]=ch;
    ch=fgetc(input);    
    }
   if(ch==‘"‘)
    {
    token[i++]=ch;
    ch=fgetc(input);
    token[i]=‘\0‘;
    count++;fprintf(output,"%4d\t(字符串\t\t,%-16s)\t%4d\n",count,token,i);
    continue;
    }
   else
    {
    while(ch!=EOF)
    {
    token[i++]=ch;
    ch=fgetc(input);
    }
    token[i]=‘\0‘;
    count++;fprintf(output,"%4d\t(字符串错误\t,%-16s)\t%4d\n",count,token,i);
    }
   } 
  else
   {
   while(ch!=‘ ‘&&ch!=‘\t‘&&ch!=‘\n‘&&ch!=EOF)
   {
    token[i++]=ch;
    ch=fgetc(input);
   }
   token[i]=‘\0‘;
   count++;fprintf(output,"%4d\t(无法识别错误\t,%-16s)\t%4d\n",count,token,i);
   continue;
   }
  }
 fclose(input);
 fclose(output);
}

/*判断是不是关键字:
 1,则是标识符
 0,则是关键字
  2,则是运算符
 */

int reserver(char *str)
{
 FILE *fpReserver;
 char *tmpStr=‘\0‘;

 if(strcmp(str,"sizeof")==0)
  return 2;
 /*打开关键字文件*/
 if((fpReserver=fopen("keyword.txt","r"))==NULL)
 { printf("file open in readonly mode,but an error generate!\n");
  exit(0);
 }
 while(fscanf(fpReserver,"%s",tmpStr)!=EOF)
  if(strcmp(str,tmpStr)==0)
   {fclose(fpReserver);return 0;}
 fclose(fpReserver);
 return 1; 



/*

输入文件input.txt

#include

void E(char *);
void E1(char *);
void T(char *);
void T1(char *);
void F(char *);

void main()
{
 char *str="i+(i*i";
 printf("%s\n",str);
 E(str);
}

void E(char *str)
{
 T(str);
 printf("1%s\n",str);
 E1(str);
 printf("2%s\n",str);
}

void E1(char *str)
{
 if (*str==‘+‘)
 {
  str++;
  T(str);
  E1(str);
 }

}

void T(char *str)
{
 F(str);
 T1(str);
}
void T1(char *str)
{
 if(*str==‘*‘)
  {
   str++;
   F(str);
   T1(str);
  }
}

void F(char *str)
{
 if(*str==‘(‘)
 {
  str++;
  E(str);
  if(*str==‘)‘)
   str++;
  else
  {
   printf("lost ‘)‘\n");
   exit(0);
  }
 }
 else if(*str==‘i‘)
  str++;
      else
  {
   printf("lost variable\n");
   exit(0);
  }
}

*/

/*

关键字文件keyword.txt

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

*/