#include<iostream>#include<>#include<>#defineLINE100//源程序每行至多100个字符usingnamespacestd;charbuf[LINE];//按行存放字符intlength;//记录每行长度char*key[9]={"PROGRAM","BEGIN","END","CONST","VAR","WHILE","DO","IF","THEN"};//关键字char*ch[15]={"+","-","*","/",":=","=","<",">",">=","<=","(",")",";",","};//限定符/界符intreadfile(FILE*fp)//,只读取一行{charch;//存放读取的单个字符length=0;ch=fgetc(fp);//调用函数fgetc()读取文件内容while(!feof(fp)&&ch!='\n')//读取字符到buf[]数组 {buf[length]=ch; ch=fgetc(fp);length++; } if(length!=0) return1; else return0;}voidlexical(char*buf,intlength)//词法分析函数{ inti; charbuffer[LINE]; for(i=0;i<length;i++) { buffer[i]=*buf;buf++; } for(i=0;i<length;i++) { //判断是否为“常数” if(buffer[i]=='0'||buffer[i]=='1'||buffer[i]=='2'||buffer[i]=='3'||buffer[i]=='4'||buffer[i]=='5'||buffer[i]=='6'||buffer[i]=='7'||buffer[i]=='8'||buffer[i]=='9') { cout<<"常数"<<buffer[i]; while(1) { i++; if(buffer[i]=='0'||buffer[i]=='1'||buffer[i]=='2'||buffer[i]=='3'||buffer[i]=='4'||buffer[i]=='5'||buffer[i]=='6'||buffer[i]=='7'||buffer[i]=='8'||buffer[i]=='9') cout<<buffer[i]; else break; } cout<<endl; } //判断是否为“算符/界符” elseif(buffer[i]=='+'||buffer[i]=='-'||buffer[i]=='*'||buffer[i]=='/'||buffer[i]=='='||buffer[i]=='('||buffer[i]==')'||buffer[i]==';'||buffer[i]==',') cout<<"算符/界符"<<""<<buffer[i]<<endl;// elseif(buffer[i]=='>'||buffer[i]=='<') { if(buffer[i+1]=='=') cout<<"算符/界符"<<""<<buffer[i]<<buffer[i+1]<<endl; else
PL0词法分析器代码 来自淘豆网m.daumloan.com转载请标明出处.