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

📄 yanbo.cpp

📁 编译原理程序
💻 CPP
字号:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<iostream.h>
#include<conio.h>
#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<<str<<endl;
	int i;
	 for(i=0;i<Max_shu;i++)
	 {  /* cout<<keywords[i];  */
	     if(!strcmp(keywords[i],str))
	     return i;
	   }
      return  1;
      }

int rightchar(char ch)
{  if   (  ((ch>='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("<KEY:      %s>\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<<character[0]<<"MMMMM"<<endl;
 if(character[0]=='+')
  {
	printf("<plus-operator,+>\n");
  }
 if(character[0]=='-')
  {
	printf("<sub-operator,->\n");
  }
if(character[0]=='*')
  {
	printf("<plus-operator,*>\n");
  }
if(character[0]=='/')
  {
	printf("<dev-operator,/>\n");
  }
if(character[0]=='(')
  {
	printf("<lpar,(>\n");
  }
if(character[0]==')')
  {
	printf("<rpar,)>\n");
  }
if(character[0]=='=')
  {
	printf("<equel-operator,=>\n");
  }
if(character[0]=='>')
  {      character[0]=fgetc(programfile);
	 if(character[0]=='=')
      {
	printf("<relation-operator,>=>\n");
       }
   else
       {
	  fseek(programfile,-1,1);
	  printf("<relation-operator,>>\n");
	}
  }
if(character[0]=='<')
  {       character[0]=fgetc(programfile);
	 if(character[0]=='=')
      {
	printf("<relation-operator,<=>\n");
       }
   else
       {
	  fseek(programfile,-1,1);
	  printf("<relation-operator,<>\n");
	}
	
  }
/*if(character[0]=='=')
  {
	printf("<plus-operator,+>\n");
  }*/
 }
 while(character[0]!=';');
exit(1);

}

⌨️ 快捷键说明

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