文档详情

设计并实现c语言词法分析器.docx

发布:2017-01-03约5.29千字共11页下载文档
文本预览下载声明
编译原理课程设计(一) ——词法分析器1、题目设计并实现c语言词法分析器。2、实验目的设计并实现 C 语言的词法分析程序,要求如下。(1) 可以识别出用C语言编写的源程序中的每个单词符号,并以记号的形式输出每个单词符号。(2) 可以识别并读取源程序中的注释。(3) 可以统计源程序中的语句行数、单词个数和字符个数,其中标点和空格不计算为单词,并输出统计结果。(4) 检查源程序中存在的非法字符错误,并可以报告错误所在的行列位置。(5) 发现源程序中存在错误后,进行适当的恢复,使词法分析可以继续进行,通过一次词法分析处理,可以检查并报告源程序中存在的所有词法拼写错误。3、输入和输出程序输入:从文件中读入程序段;程序输出:由单词种别和单词符号的属性值组成的二元式;4、状态转换图白字母非字母与数字字母或数字数字非数字运算符界符其他*****5、程序框架描述程序中编写了以下函数,各个函数实现的作用如下:int alpha(int st)://识别保留字和标识符。int number(int st) //识别整数int anotation(int st) //处理除号/和注释int other(int st) //函数识别其他特殊字符int choice(int st) //根据读入的单词的第一个字符确定调用不同的单词识别函数6、实现程序的源程序代码#includestdio.h#includestdlib.h#includestring#includeiostreamusing namespace std;string keywords[20]={include,void,main,int,char,float,double,if,else,then,break,continue,for,do,while,printf,scanf,begin,end,return};char rz[99999]= ;string id[10000];int pp=0;string nu[10000];int qq=0;int choice1(char a) //判断是否是字母{ if((a=aa=z)||(a=Aa=Z)) return 1; else return 0;}int choice2(char a) //判断是否是数字{ if(a=0a=9) return 1; else return 0;}int alpha(int st) //识别保留字和标识符{char wordbuf[20]= ;int n=0;for( ; ; ){wordbuf[n]=rz[st]; st++;n++; if((choice2(rz[st])==1)||(choice1(rz[st])==1)||(rz[st]==_))wordbuf[n]=rz[st];else break;}int flag=0;for(int k=0;k20;k++){if(strcmp(keywords[k].c_str(),wordbuf)==0) flag=1;} if(flag==0){int flagg=-1;for(int t=0;tpp;t++){ if(strcmp(id[t].c_str(),wordbuf)==0){ flagg=t;}}if(flagg!=-1) printf( (id,%d) ,flagg);else{ id[pp]=wordbuf; printf( (id,%d) ,pp); pp++;}}else {printf( ();for(int i=0;in;i++){ printf(%c,wordbuf[i]);}printf(,-) );}return st;}int number(int st) //识别整数{char numbuf[20]= ;int n=0;int k=0;int flag=0;for( ; ; ){numbuf[n]=rz[st]; st++;n++; if(choice2(rz[st])==1){numbuf[n]=rz[st];}else if((k==0)(rz[st]==.)) {numbuf[n]=rz[st];k++;}else if(choice1(rz[st])==1){numbuf[n]=rz[st];flag=1;continue;}else break;}if(flag==0){int flagg=-1;for(int t=0;tqq;t++) if(strcmp(nu[t].c_str(),numbuf)==0) flagg=t;if(flagg!=-1) printf( (nu,%d) ,flagg);else{ nu[qq]=numbuf; printf( (nu,
显示全部
相似文档