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

📄 accidence.c

📁 这是一个词法分析器的源程序
💻 C
字号:
  //accidence.c
  ///////////////////////////////////////////////////////////////////////////////////   
  #include   <stdio.h>   
  #include   <stdlib.h>   
  #include   <io.h>   
  #include   "accidence.h"   
    
  extern   Token   token_String[4096];   
  extern   pSymbol   SymbolList[4096];   
    
  static   char   *p_KeyWord[256];   
  static   char   c_Temp[256];   
  static   int   row=0,col=0;   
  static   FILE   *fp_Error;   
    
  main(int   argc,char   *argv[])   
  {   
  FILE   *fp_Program,*fp_KeyWord,*fp_Token,*fp_SymbolList;   
    
  int   i=0;   
  int   temp;   
    
  for(i=0;i<4096;i++)     
  {   
  SymbolList[i]=NULL;   
  }   
  for(i=0;i<255;i++)   
  {   
  p_KeyWord[i]=NULL;   
  }   
  /* if   (argc!=2)   
  {   
  printf("you   forgot   to   type   your   programe   name   \n");   
  exit(0);   
  }   
  if(!(fp_Program=fopen(argv[1],"r")))   
  {   
  printf("Can't   open   file   %s!",argv[1]);   
  exit(1);   
  }*/   
  if(!(fp_Program=fopen("efile.pas","r")))   
  {   
  printf("Can't   open   file   rfile.pas!");   
  exit(1);   
  }   
  if(!(fp_KeyWord=fopen("KeyWord.dat","rb")))   
  {   
  printf("Can't   open   file   KeyWord.dat!");   
  exit(1);   
  }   
  if(!(fp_Error=fopen("error.txt","w+")))   
  {   
  printf("Can't   open   file   error.txt!");   
  exit(1);   
  }   
  for(i=0;!feof(fp_KeyWord);i++)   
  {   
  if(!(p_KeyWord[i]=(char*)malloc(20*sizeof(char))))   
  {   
  printf("Allocation   momory   fail!!");   
  exit(1);   
  }   
  fscanf(fp_KeyWord,"%s",p_KeyWord[i]);   
  }   
  free(p_KeyWord[i-1]);   
  p_KeyWord[i-1]=NULL;   
    
  while(!feof(fp_Program))   
  {   
  for(i=0;;i++)   
  {   
  if(i>255)   
  {   
  printerr(4);   
  fprintf(fp_Error,"This   line   is   too   long.Please   255   charactor   a   Line!\n");   
  c_Temp[i]='\n';   
  do   
  {   
  temp=getc(fp_Program);   
  }while(temp!=EOF&&temp!='\n');   
  break;   
  }   
  c_Temp[i]=fgetc(fp_Program);   
  if(c_Temp[i]=='\n')   
  break;   
  if(c_Temp[i]==EOF)   
  {   
  c_Temp[i]='\n';   
  break;       
  }   
  }   
  scanner(c_Temp);   
  row++;   
  }   
  fp_Token=fopen("token.txt","w+");   
  fp_SymbolList=fopen("symbol.txt","w+");   
  i=0;   
  while(token_String[i].Kin_Cod)   
  {   
  if(token_String[i].Kin_Cod<=37   &&   token_String[i].Kin_Cod>=34)   
  {   
  if(SymbolList[token_String[i].Index]->Type==IND||   
  SymbolList[token_String[i].Index]->Type==STRING)   
  fprintf(fp_Token,"(%d,'%s')",token_String[i].Kin_Cod,   
  SymbolList[token_String[i].Index]->Addr);   
  if(SymbolList[token_String[i].Index]->Type==INT)   
  fprintf(fp_Token,"(%d,%d)",token_String[i].Kin_Cod,   
  SymbolList[token_String[i].Index]->lVal);   
  if(SymbolList[token_String[i].Index]->Type==FLOAT)   
  fprintf(fp_Token,"(%d,%f)",token_String[i].Kin_Cod,   
  SymbolList[token_String[i].Index]->dVal);   
  }   
  else   
  fprintf(fp_Token,"(%d,_)",token_String[i].Kin_Cod);   
  fprintf(fp_Token,"\n");   
  i++;   
  }   
  i=0;   
  while(SymbolList[i])   
  {   
  if(SymbolList[i]->Type==IND)   
  fprintf(fp_SymbolList,"IND             %s\n",SymbolList[i]->Addr);   
  if(SymbolList[i]->Type==INT)   
  fprintf(fp_SymbolList,"INT             %ld\n",SymbolList[i]->lVal);   
  if(SymbolList[i]->Type==FLOAT)   
  fprintf(fp_SymbolList,"FLOAT         %f\n",SymbolList[i]->dVal);   
  if(SymbolList[i]->Type==STRING)   
  fprintf(fp_SymbolList,"STRING       %s\n",SymbolList[i]->Addr);   
  i++;   
  }   
  for(i=0;p_KeyWord[i];i++)     
  free(p_KeyWord[i]);   
  for(i=0;SymbolList[i];i++)     
  free(SymbolList[i]);   
  fclose(fp_Token);   
  fclose(fp_SymbolList);   
  fclose(fp_Program);   
  fclose(fp_KeyWord);   
  fclose(fp_Error);   
  system("edit   token.txt");   
  system("edit   symbol.txt");   
  system("edit   error.txt");   
  }   
    
  /////////////////////////////////////////////////////////////////////////////   

    


⌨️ 快捷键说明

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