www.pudn.com > YANBO.rar > YANBO.CPP


#include 
#include 
#include 
#include 
#include 
#define Max_buffer_size  1024 
#define Max_hen   10 
#define Max_shu   10 
 
 
char  Buffer_tp1[Max_buffer_size]; 
char  Buffer_tp2[Max_buffer_size]; 
char  token[20]; 
char  character[1]; 
char keyword[10][10]; 
char keywords[ Max_hen][Max_shu]= 
     {"while","for","if","then","do", 
	 "switch" ,"main","else","include","int" 
      }; 
char buffer[20]; 
struct Identi_words 
     { 
     char words[20]; 
     int  id; 
     struct Identi_words *next; 
     }; 
      Identi_words  *head=NULL; 
     /* head=new struct Identi_words;     */ 
    /* struct Identi_words  *tail=NULL; */ 
 
int iskeyword(char *str) 
      {  // cout<='0')&&(ch<='9')) 
	   ||((ch>='a')&&(ch<='z')) 
	   ||((ch>='A')&&(ch<='Z')) 
            ||(ch=='+')||(ch=='-')||(ch=='*')||(ch=='/')||(ch=='(') 
            ||(ch==')')||(ch=='<')||(ch=='>') 
	   ) 
	   return  1; 
   else return  0; 
} 
int is0xchar(char ch) 
{    if(   ((ch>='0')&&(ch<='9')) 
           ||((ch>='a')&&(ch<='f')) 
           ||((ch>='A')&&(ch<='F')) 
        ) 
       return  1; 
  else        return 0; 
 
} 
 
int is0char(char ch) 
{    if(  ((ch>='0')&&(ch<='7'))) 
       return  1; 
  else        return 0; 
 
} 
int isletter(char ch) 
      { 
	 
	 if( (ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')) 
	       {   
		  return 1; 
		} 
	 else 
	    return 0; 
       } 
 int isdigit(char ch) 
      {  
	   if( ch>='0'&&ch<='9') 
	    {                 
	    return 1; 
	 } 
	 else 
	       return 0; 
      } 
 
  void  bulid_list(char  *buffer) 
  {   int flag; 
	  /*struct */ 
		  Identi_words  *temp ,*Temphead ,*This; 
		 temp=new Identi_words; 
	  strcpy(temp->words,buffer); 
	  if(head->next==NULL) 
	  {    head->next=temp; 
	        temp->id=1; 
		   
	  } 
	  else 
	  {     This=head; 
		Temphead=head; 
	     while(This!=NULL) 
		{  if(!strcmp(This->next->words,buffer)) 
		     flag=1; 
 
		   This=This->next; 
		} 
		if(flag!=1) 
		{       temp->id=Temphead->next->id+1; 
			temp->next=Temphead->next; 
			head->next=temp; 
		} 
 
	  } 
 
  } 
  int search_list(char *buf) 
  {      struct Identi_words *temp; 
	   temp=new Identi_words; 
	   temp=head; 
	   while(temp!=NULL) 
		   { 
		       if(!strcmp(temp->words,buf)) 
			{ 
			      return temp->id; 
			} 
	    temp=temp->next; 
	  } 
       return 0; 
       } 
    
 void Buffer_clear() 
 { int i; 
	  for(i=0;i<20;i++) 
	  buffer[i]='\0'; 
      } 
 
 
 void main () 
{          char  buf[2]; 
	     /* char ch;*/ 
		 int count=0; 
	     head=new Identi_words; 
	     head->next=NULL; 
	    /* head=NULL;    */ 
	    /* head->id=0;   */ 
		 int idf; 
		  FILE  *programfile; 
	    clrscr(); 
	    programfile=fopen("d:\\cf.txt","rb"); 
	     if(!programfile) 
	     { 
	      printf("Can not open the file %s"); 
	      exit(1); 
	      } 
do { 
 
	do{ 
	      character[0]=fgetc(programfile); 
	     count=count+1; 
	   } 
	   //while(character[0]!='\0'&&character[0]!='\n'&&character[0]!=' '&&character[0]!='\r'&&character[0]!='0'); 
	 while(rightchar(character[0])==0&&character[0]!=';'); 
	 Buffer_clear(); 
	 int  i=0; 
	 if(isletter(character[0])) 
	 {   buffer[i]=character[0]; 
	     i++; 
	     character[0]=fgetc(programfile); 
	     count=count+1; 
	  do{ 
		  if(isletter(character[0])||isdigit(character[0])) 
		    { 
			  buffer[i]=character[0]; 
			  i=i+1; 
			   character[0]=fgetc(programfile); 
			   count=count+1; 
		    } 
		/* character[0]=fgetc(programfile); 
		 count=count+1;   */ 
		// buffer[i]='\0'; 
 
	  } while(rightchar(character[0])==1); 
	  //while(character[0]!='\0'||character[0]!=' '||character[0]!='*'||character[0]!='\n'||character[0]!='\r'); 
      /*	 fseek(programfile,-1,1);         */ 
 
    } 
  if((isdigit(character[0])==1)&&character[0]!='0') 
  { 
	  do{ 
		  buffer[i]=character[0]; 
	      i++; 
	      character[0]=fgetc(programfile); 
	      count=count+1; 
	  }while(isdigit(character[0])); 
 
     //buffer[i+1]='\0'; 
   /*  fseek(programfile,(count-1)*sizeof(char),0); */ 
  } 
if(character[0]=='0') 
{          buffer[i]=character[0]; 
	   character[0]=fgetc(programfile); 
	    if(character[0]=='x'||character[0]=='X') 
	    {   // buffer[i]=character[0]; 
	       do{ 
		   i++; 
		   buffer[i]=character[0]; 
		   character[0]=fgetc(programfile)  ; 
		}while(is0xchar(character[0])==1); 
		printf("<0x number :%s>\n",buffer); 
		i=0; 
	       // Buffer_clear(); 
	    } 
	   else if(is0char(character[0])) 
	     {     i=i+1; 
		   buffer[i]=character[0]; 
		   character[0]=fgetc(programfile); 
		do{ 
		    i=i+1; 
		    buffer[i]=character[0]; 
		     character[0]=fgetc(programfile)  ; 
		  }while(is0char(character[0])==1); 
	 //   buffer[i]='\0'; 
	   printf("<0  number :%s>\n",buffer); 
	   i=0; 
	      } 
 
} 
 
  if(iskeyword(buffer)!=1) 
  { 
	       printf("\n",buffer); 
                 Buffer_clear(); 
  } 
  if((iskeyword(buffer)==1)&&(buffer[0]!='\0')) 
  { 
            bulid_list(buffer); 
	    idf=search_list(buffer); 
	    if(idf!=0) 
           { printf("<%s,   List_number:%d>\n",buffer,idf); 
		Buffer_clear();  } 
  } 
 // cout<\n"); 
  } 
 if(character[0]=='-') 
  { 
	printf("\n"); 
  } 
if(character[0]=='*') 
  { 
	printf("\n"); 
  } 
if(character[0]=='/') 
  { 
	printf("\n"); 
  } 
if(character[0]=='(') 
  { 
	printf("\n"); 
  } 
if(character[0]==')') 
  { 
	printf("\n"); 
  } 
if(character[0]=='=') 
  { 
	printf("\n"); 
  } 
if(character[0]=='>') 
  {      character[0]=fgetc(programfile); 
	 if(character[0]=='=') 
      { 
	printf("=>\n"); 
       } 
   else 
       { 
	  fseek(programfile,-1,1); 
	  printf(">\n"); 
	} 
  } 
if(character[0]=='<') 
  {       character[0]=fgetc(programfile); 
	 if(character[0]=='=') 
      { 
	printf("\n"); 
       } 
   else 
       { 
	  fseek(programfile,-1,1); 
	  printf("\n"); 
	} 
	 
  } 
/*if(character[0]=='=') 
  { 
	printf("\n"); 
  }*/ 
 } 
 while(character[0]!=';'); 
exit(1); 
 
}