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("\t E>E>\n"); } else if(strcmp(lookahead,"<")==0) { match("<"); match("="); E(); printf("\t E<=E>\n"); } else { printf("CC yu fa cuo wu\n"); exit(1); } } void E() { T(); if(strcmp(lookahead,"+")==0) { match("+"); E(); printf("\t E+T>\n"); } else if(strcmp(lookahead,"-")==0) { match("-"); E(); printf("\t E-T>\n"); } /*else if(strcmp(lookahead,"#")==0) { printf("\t T>\n"); } else { printf("EE yu fa cuo wu\n"); exit(1); }*/ else { printf("\t T>\n"); } } void T() { F(); if(strcmp(lookahead,"*")==0) { match("*"); T(); printf("\t T*F>\n"); } else if(strcmp(lookahead,"/")==0) { match("/"); T(); printf("\t T/F>\n"); } /*else if(strcmp(lookahead,"#")==0) { printf("\t F>\n"); } else { printf("TT yu fa cuo wu\n"); exit(1); }*/ else { printf("\t F>\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("\t const>\n"); } else { printf("FF yu fa cuo wu\n"); exit(1); } } main() { clrscr(); strcpy(lookahead,nexttoken()); S(); exit(1); getch(); return 1; }