文档详情

pl0词法分析器.doc

发布:2017-08-10约4.13千字共6页下载文档
文本预览下载声明
#include stdio.h #include stdlib.h #include string.h char ch; FILE *fp; char Getchar2() { ch=fgetc(fp); if(ch== ||ch==10||ch==9) ch=fgetc(fp); return ch; } char Getchar() { ch=fgetc(fp); return ch; } bool IsLetter()//判断ch是否为字母 { if(ch=zch=a || ch=Zch=A) return true; else return false; } bool IsDigit()//判断ch是否为数字 { if(ch=9 ch=0) return true; else return false; } void Concat(char strToken[30])//将ch中的字符加入strToken中 { int i=0; while(strToken[i]!=\0) i++; strToken[i]=ch; strToken[i+1]=\0; } int Reserve(char str[]) { if(strcmp(str,begin)==0) return 1; else if(strcmp(str,call)==0) return 2; else if(strcmp(str,const)==0) return 3; else if(strcmp(str,do)==0) return 4; else if(strcmp(str,end)==0) return 5; else if(strcmp(str,if)==0) return 6; else if(strcmp(str,odd)==0) return 7; else if(strcmp(str,procedure)==0) return 8; else if(strcmp(str,read)==0) return 9; else if(strcmp(str,program)==0) return 10; else if(strcmp(str,var)==0) return 11; else if(strcmp(str,while)==0) return 12; else if(strcmp(str,write)==0) return 13; else if(strcmp(str,than)==0) return 14; else return 0; } int InsertConst(char str[]) { int i,value=0; for(i=0;str[i]!=\0;i++) { value=10*value+str[i]-0; } return value; } void main() { int code , value; char id[30]={}; char strToken[30]; if((fp=fopen(1.txt,r))==NULL) { printf(文件打开失败!\n); exit(0); } ch=Getchar2(); //读取一个非空字符 while(ch!=EOF) { strcpy(strToken,id); if(IsLetter()) { while( IsLetter() || IsDigit() ) { Concat(strToken); ch=Getchar(); } code=Reserve(strToken);//保留字返回它代码,否则返回0值 if(code==0) printf(%s -\n,strToken); else { switch(code) { case 1: printf(begin -\n); break; case 2: printf(call -\n); break; case 3: printf(const -\n); break; case 4: printf(do -\n); break; case 5: printf(end -\n); break; case 6: printf(if -\n); b
显示全部
相似文档