3、pe.h>char*table[7]={"","main","int","if","then","else","return"},TOKEN[20],ch;//定义关键字intlookup(char*TOKEN){//关键字匹配函数intm,i;
for(i=1;i<6;i++){if((m=strcmp(TOKEN,table[i]))==0)return(i);}return(0);}教育资料.voidout(intc,char*TOKEN){//输出函数printf("(%d,%s)",c,TOKEN);}v
4、oidscanner(FILE*fp){//扫描函数charTOKEN[20]={' '};charch;inti,c;ch=fgetc(fp);//获取字符指针fp并自动指向下一个字符if(isalpha(ch)){//判断该字符是否是字母TOKEN[0]=ch;ch=fgetc(fp);i=1;while(isalnum(ch)){//判断该字符是否是字母或数字TOKEN[i]=ch;i++;ch=fgetc(fp);}TOKEN[i]=' ';fseek(fp,-1,1);//回退一个字符c=lookup(
5、TOKEN);if(c==0)out(6,TOKEN);//输出标识符elseout(c,TOKEN);//输出关键字}elseif(isdigit(ch)){//判断是否是数字TOKEN[0]=ch;ch=fgetc(fp);i=1;while(isdigit(ch)){TOKEN[i]=ch;i++;ch=fgetc(fp);}TOKEN[i]=' ';fseek(fp,-1,1);out(7,TOKEN);}else{TOKEN[0]=ch;switch(ch){case'{':out(17,TOKEN);br
6、eak;case'}':out(18,TOKEN);break;教育资料.case',':out(14,TOKEN);break;case';':out(15,TOKEN);break;case'<':ch=fgetc(fp);TOKEN[1]=ch;if(ch=='='){out(9,TOKEN);}elseif(ch=='>'){out(11,TOKEN);}else{fseek(fp,-1,1);out(8,TOKEN);}break;case'=':out(10,TOKEN);break;case'>':ch=
7、fgetc(fp);TOKEN[1]=ch;if(ch=='=')out(13,TOKEN);else{fseek(fp,-1,1);out(12,TOKEN);}break;default:printf("error!");break;}}}voidmain(){FILE*fp;if((fp=fopen("D:\ZHT.txt","r"))==NULL){//读取文件内容,并返回文件指针,该指针指向文件的第一个字符fprintf(stderr,"erroropening.");exit(1);}do{ch=
8、fgetc(fp);if(ch=='#')//文件以#结尾作为扫描结束条件break;if(ch=='')//如果是空格,自动跳到下个字符scanner(fp);教育资料.else{fseek(fp,-1,1);//如果不是空格,则回退一个字符并扫描scanner(fp);}}while(ch!='#');return(0);}三