资源描述:
《词法分析器-计算器-设计及实现实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、辅导教师张静成绩实验日期实验时间1实验名称:词法分析器的设计与实现2、实验目的(1)掌握C语言单词符号的划分、正规式、状态转换图及词法分析器的实现。(2)掌握词法分析程序的作用。3、实验要求(1)对任给的一个C语言源程序,能够滤掉空格、回车换行符、tab键及注释。(2)识别各类单词符号,如关键字、标识符、运算符、常数、界符,结果以二元式形式输出,并构造符号表。(3)输出有词法错误的单词及所在行号。(在此阶段只能识别有限的词法错误)4、实验原理根据扫描到的单词符号的第一个字符的种类,分别转到相应的程
2、序进行处理。这些程序的功能就是识别以相应字符开头的各类单词符号。5、实验步骤(1)根据C语言各类单词的正规式,构造能识别各类单词的状态转换图。(2)根据状态转换图,构造识别各类单词的词法分析器。6、状态转换图及词法分析程序状态转换图:01324567空白字母非字母与数字字母或数字数字非数字运算符界符其他*****词法分析程序:#include#include#include#includeusingnamespacestd;
3、stringkeywords[20]={"include","void","main","int","char","float","double","if","else","then","break","continue","for","do","while","printf","scanf","begin","end","return"};charrz[99999]="";stringid[10000];intpp=0;stringnu[10000];intqq=0;intchoice1(cha
4、ra)//判断是否是字母{if((a>='a'&&a<='z')
5、
6、(a>='A'&&a<='Z'))return1;elsereturn0;}intchoice2(chara)//判断是否是数字{if(a>='0'&&a<='9')return1;elsereturn0;}intalpha(intst)//识别保留字和标识符{charwordbuf[20]="";intn=0;for(;;){wordbuf[n]=rz[st];st++;n++;if((choice2(rz[st])==1)
7、
8、
9、(choice1(rz[st])==1)
10、
11、(rz[st]=='_'))wordbuf[n]=rz[st];elsebreak;}intflag=0;for(intk=0;k<20;k++){if(strcmp(keywords[k].c_str(),wordbuf)==0)flag=1;}if(flag==0){intflagg=-1;for(intt=0;t12、printf("(id,%d)",flagg);else{id[pp]=wordbuf;printf("(id,%d)",pp);pp++;}}else{printf("(");for(inti=0;i13、++;n++;if(choice2(rz[st])==1){numbuf[n]=rz[st];}elseif((k==0)&&(rz[st]=='.')){numbuf[n]=rz[st];k++;}elseif(choice1(rz[st])==1){numbuf[n]=rz[st];flag=1;continue;}elsebreak;}if(flag==0){intflagg=-1;for(intt=0;t14、flagg=t;if(flagg!=-1)printf("(nu,%d)",flagg);else{nu[qq]=numbuf;printf("(nu,%d)",qq);qq++;}}else{printf("(");for(inti=0;i