www.pudn.com > yanboyufa.rar > yanboyufa.CPP


#include  
#include  
#include  
#include  
#include  
#include  
char *nexttoken(); 
void S(); 
void C(); 
void E(); 
void T(); 
void F(); 
char  lookahead[20]; 
int   code=0; 
int   flag1=0; 
char  chart[20][20]; 
 
 
  void match( char *t) 
  {     //    cout<'&&flag==0)  //return (23); 
	{ 
		chart[code][i]=ch; 
		chart[code][i+1]='\0'; 
		code=code+1;//return (3); 
		flag=1; 
	} 
	if(ch=='<'&&flag==0)  //return (24); 
	{ 
		chart[code][i]=ch; 
		chart[code][i+1]='\0'; 
		code=code+1;//return (3); 
		flag=1; 
	} 
	if(ch=='='&&flag==0)  //return (25); 
	{ 
		chart[code][i]=ch; 
		chart[code][i+1]='\0'; 
		code=code+1;//return (3); 
		 flag=1; 
	} 
     if( key(chart[code-1])==1) 
	    return   chart[code-1]; 
      else return  "id"; 
} 
 
int isletter(int ch) 
{ 
	if(((ch>='a')&&(ch<='z'))||((ch>='A')&&(ch<='Z'))) 
		return(1); 
	else return(0); 
} 
int isdigit(int ch) 
{ 
	if((ch>='0')&&(ch<='9')) 
		return(1); 
	else return(0); 
} 
int rightchar(char ch) 
{  if   (((ch>='0')&&(ch<='9')) 
	   ||((ch>='a')&&(ch<='z')) 
	   ||((ch>='A')&&(ch<='Z')) 
	   ||(ch==10)||(ch==':')||(ch=='=') 
	   ||(ch=='+')||(ch=='-')||(ch=='*')||(ch=='/') 
	   ||(ch=='(')||(ch==')')||(ch=='>')||(ch=='<')) 
	   return(1); 
	   else return(0); 
} 
int key(char *a) 
{ 
  if(   (a[0]=='=')||(a[0]=='+')||(a[0]=='*')||(a[0]=='/')||(a[0]=='-')||(a[0]=='>') 
	||((a[0]=='<')&&(a[1]=='=')&&(a[2]=='\0')) 
	||((a[0]=='i')&&(a[1]=='f')&&(a[2]=='\0')) 
	|| ((a[0]=='i')&&(a[1]=='d')&&(a[2]=='\0')) 
      ||((a[0]=='t')&&(a[1]=='h')&&(a[2]=='e')&&(a[3]=='n')&&(a[4]=='\0')) 
      || ((a[0]=='w')&&(a[1]=='h')&&(a[2]=='i')&&(a[3]=='l')&&(a[4]=='e')&&(a[5]=='\0')) 
      ||((a[0]=='d')&&(a[1]=='o')&&(a[2]=='\0')) 
      ||((a[0]=='e')&&(a[1]=='l')&&(a[2]=='s')&&(a[3]=='e')&&(a[4]=='\0')) 
      ) 
     return 1; 
     else return 0; 
} 
 
  void S() 
 { 
       //	  strcpy(lookahead,nexttoken()); 
	  if(strcmp(lookahead,"id")==0) 
	  { 
		  match("id"); 
		  match("="); 
	       //	  cout<<"MMMMMMM"<id=E>\n"); 
	  } 
	  else if(strcmp(lookahead,"if")==0) 
	  {      //cout<<"IFIFIFIFIF"<\n"); 
	  } 
	  else if(strcmp(lookahead,"while")==0) 
	  { 
		  match("while"); 
		  C(); 
		  match("do"); 
		  S(); 
	  printf("\t\n"); 
	  } 
	  else 
	  { 
		 printf("SS yu fa cuo wu\n"); 
		 exit(1); 
	  } 
  } 
  void C() 
  {       E(); 
	  //strcpy(lookahead,nexttoken()); 
	  if(strcmp(lookahead,">")==0) 
	  { 
	     match(">"); 
	     E(); 
	     printf("\tE>E>\n"); 
	  } 
	  else if(strcmp(lookahead,"<")==0) 
	  {  match("<"); 
	     match("="); 
	     E(); 
	     printf("\tE<=E>\n"); 
	  } 
	   else 
	 { 
		 printf("CC  yu fa cuo wu\n"); 
		 exit(1); 
	 } 
  } 
 
  void E() 
  {      T(); 
	 if(strcmp(lookahead,"+")==0) 
	 { 
	     match("+"); 
	     E(); 
	     printf("\tE+T>\n"); 
	  } 
	 else if(strcmp(lookahead,"-")==0) 
	 {  match("-"); 
	     E(); 
	     printf("\tE-T>\n"); 
	  } 
	 /*else if(strcmp(lookahead,"#")==0) 
	 { 
		  printf("\tT>\n"); 
	  } 
	  else 
	  { 
		 printf("EE  yu fa cuo wu\n"); 
		 exit(1); 
	  }*/ 
	 else 
	 { 
		  printf("\tT>\n"); 
	  } 
 
  } 
  void T() 
  {      F(); 
	if(strcmp(lookahead,"*")==0) 
	 { 
	     match("*"); 
	     T(); 
	     printf("\tT*F>\n"); 
	  } 
	 else if(strcmp(lookahead,"/")==0) 
	 { 
	     match("/"); 
	     T(); 
	     printf("\tT/F>\n"); 
	  } 
	 /*else if(strcmp(lookahead,"#")==0) 
	 { 
		  printf("\tF>\n"); 
	  } 
	  else 
	  { 
		 printf("TT  yu fa cuo wu\n"); 
		 exit(1); 
	  }*/ 
	 else 
	 { 
		  printf("\tF>\n"); 
	  } 
 
  } 
  void F() 
  {       //flag1=1; 
	//  cout<<"FFFFFFF"<(E)>\n"); 
	  } 
	  else if(strcmp(lookahead,"id")==0) 
	  {    // cout<<"**FFFFIDIDIDID"<id>\n"); 
	  } 
	else if(strcmp(lookahead,"const")==0) 
	  { 
	      match("const"); 
	      printf("\tconst>\n"); 
	  } 
	  else 
	  { 
	      printf("FF yu fa cuo wu\n"); 
	      exit(1); 
	  } 
  } 
  main() 
  {        clrscr(); 
	   strcpy(lookahead,nexttoken()); 
	   S(); 
	   exit(1); 
	   getch(); 
	   return 1; 
  }