#include <stdio.h> #include <string.h> #include <iostream.h> /*全局变量*/ char * chr_form[100]; int q=0,temp; char *word[6]={"begin","end","if","then","do","while"}; int i=0,j=0,k=0,t=0; char ch,str[20]; char *ss[100]; char form[1000]; void analyze(); void main () { printf("输入字符串,以*结束:"); form[0]=cin.get(); for(q=1;form[q-1]!='##';q++) { form[q]=cin.get(); if(form[q]=='*') { printf("你输入是:\n"); cout.write(form,q); break; } } cout<<endl; analyze(); } void GetChar() { ch=form[k]; k++; } void getbc() { while(ch==' ') { GetChar(); } } void concat() { str[i]=ch; i++; } bool isletter() { if(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))) return(1); else return(0); } bool isdigit() { if(((ch)<='9')&&((ch)>='0')) return (1); else return (0); } int reserve() { for(int q=0;q<5;q++) { if(strcmp(word[q],str)==0) return q; if(q==4) return -1; } } void retract() { k--; ch=NULL; } char *insertld() { chr_form[j]=str; j++; return chr_form[0]; } char * insertconst() { ss[t]=str; t++; return ss[0]; } int code; void output(int a,char *p1,char *p2) { cout<<"\t类别码:"<<a<<"\t 单词值:"; while(p1<=p2) { printf("%s",*p1); p1++; } cout<<endl; } void analyze() { GetChar(); getbc(); if(isletter()) { while (isletter()||isdigit()) { concat(); GetChar(); } retract(); code=reserve(); switch(code) { case 0:cout<<"单词:" <<str<<" 类别码为: "<<1<<endl;break; case 1:cout<<"单词:" <<str<<" 类别码为: "<<2<<endl;break; case 2:cout<<"单词:" <<str<<" 类别码为: "<<3<<endl;break; case 3:cout<<"单词:" <<str<<" 类别码为: "<<4<<endl;break; case 4:cout<<"单词:" <<str<<" 类别码为: "<<5<<endl;break; case 5:cout<<"单词:" <<str<<" 类别码为: "<<6<<endl;break; default: cout<<"单词:" <<str<<" 类别码为: "<<6<<endl;break; } } else { if( isdigit()) { while(isdigit()||ch=='.') { concat(); GetChar(); } retract(); cout<<"单词:"<<str<<" 类别码为:"<<7<<endl; } else { switch(ch) { case'+': printf("+ 类别码为13\n");break; case'-': printf("- 类别码为14\n");break; case'*': printf("* 类别码为15\n");break; case'/': printf("/ 类别码为16\n");break; case';': printf("; 类别码为26\n");break;; case'(': printf("( 类别码为27\n");break; case')': printf(") 类别码为58\n");break; case'#': printf("#类别码为0\n");;break; case':':GetChar(); if(ch=='=') { cout<<"单词::= 类别码为: "<<18<<endl;break; } else { retract(); cout<<"单词:: 类别码为: "<<17<<endl;break; } case'=':cout<<"单词:= 类别码:"<<24<<endl; break; case'>':GetChar();switch(ch) { case'=':cout<<"单词:>= 类别码:"<<24<<endl;break; default: retract; cout<<"单词:=> 类别码:"<<12<<endl;break; } case'<':GetChar(); switch(ch) { case'=':cout<<"单词:<= 类别码:"<<21<<endl;break; case'>':cout<<"单词:<> 类别码:"<<22<<endl;break; default: retract(); cout<<"单词:< 类别码:"<<20<<endl;break; } } } } while(k<q) { for(int p=0;p<50;p++) str[p]='\0'; i=0; analyze(); } }