小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

c語言詞法分析器

 funson 2007-03-28

   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(負(fù)運算符\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);
}

/*判斷是不是關(guān)鍵字:
 1,則是標(biāo)識符
 0,則是關(guān)鍵字
  2,則是運算符
 */

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

 if(strcmp(str,"sizeof")==0)
  return 2;
 /*打開關(guān)鍵字文件*/
 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<stdio.h>

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);
  }
}

*/

/*

關(guān)鍵字文件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

*/

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多