《词法分析实验报告范文.docx》由会员分享,可在线阅读,更多相关《词法分析实验报告范文.docx(19页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、词法分析实验报告范文一、实验目得:通过设计编制调试一个具体得词法分析程序,加深对词法分析原理得理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词得词法分析方法。编制一个读单词过程,从输入得源程序中,识别出各个具有独立意义得单词,即基本保留字、标识符、常数、运算符、分隔符五大类.并依次输出各个单词得内部编码及单词符号自身值。二、实验要求如源程序为C语言输入如下一段:min()ina,b;=10;;02+a=#要求输出如右图.要求:1、将单词分为五种识别关键字:min、i、nt、for、while、o、eur、break、contine;单词种别码为1标识符;单词种别码为。常数为无
2、符号整形数;单词种别码为3。运算符包括:+、某、=、=、=、!;单词种别码为4。分隔符包括:,、;、(、);单词种别码为5。2、使用一符一种得分法关键字、运算符与分界符可以每一个均为一种标识符与常数仍然一类一种三、实验内容1、功能描述改程序就是一个实现词法分析得功能,能识别5种单词,其她单词报错。2、程序结构描述itIey(har某Word)关键字匹配函数,查询就是否为关键字,若就是,返回值为1,否则为0。inIlpha(charc)查瞧就是否为字母,若就是,返回值为1,否则为0。iINum(harc)查瞧就是否为数字,若就是,返回值为1,否则为。vodcanner(FIE某p)扫描函数,扫描
3、程序中得字符串并调用上述三种函数检查就是否就是字母、数字,就是否就是关键字,并输出。eek(fp,1)回退一个字符。fget(fp)从数据流中区下一个字符。fope文件打开函数,返回指向文件第一个字符得指针四、实验结果测试内容为man()(1,”main”)(5,”(“)(5,”)“)(5,”“)(1,”int”)(2,”a”)(5,”,”)(2,”b”)(5,”;”)(2,”a”)(4,”=”)(3,”10”)(5,”;”)(2,”b”)(4,”=”)(2,”a”)(4,”+”)(3,”20”)(5,”;”)(5,”“)ita,b;a=10;=a+20;#结果测试代码为vodain()nta
4、,;if(a=10;)b=20;c=;#结果为测试代码man()ina,b;i(=”10)20;c%;rtur;#结果五、实验过程记录1、因为用到回退函数eek(),而以前没有用过这个函数,所以开始时很苦恼,不知道如何回退一个字符,后来问了同学,才明白原来有这么一个函数,顿时豁然开朗。2、本次试验中word2保存字符串时,不能正确保存,总就是出错,原因就是hi(INu(ch)|Apa(h)Wordch;+ih=tc(fp);题问现发,索思次多来后,对不序次;hc=idroW与+,中六、实验总结本次实验花了将近一个下午才完成。在纸上设计得时间大约4分钟,剩下得时间就是录入与调试。本次实验使我认识
5、到,一段时间搁置,不编程序,水平会下降,好多有关c语言得知识会忘掉,所以以后我会经常写写程序另外,通过本次实验,我又进一步加深对词法分析原理得理解。总得来说,获益匪浅!附录#includetrigg、hhiiccuueetd、iicldetdli、hh#iclddctype、hh#icluioteam、hhChar某Kyy=”vid,”main,int”,”if”,”hen,e,return,”brea,continue”;charch;存储识别出得单词流ntAlpa(charcc)/判断就是否为字母(ii((cz)&(cc=a))|((=A))retrn1;elereturn;iitINuu
6、(char)/判断就是否为数字c(fiif(c=0&c=)re1;lrrurn0;intIKy(charood)/识别关键字函数iit,i;ffrr(i=0;+)ii((mmtcmp(Wor,Kei)=)rrttn1;reuun0;vvdcanner(FIfp)/扫描函数ahcchaoodd20=;hcrahccharch;iit,c;ch=getc(fp);/获取字符,指针ff并自动指向下一个字符if(Alpha()/判断该字符就是否就是字母oWWo0ch;f=hcch=fetc(p);1=ii=1;wwiie(INum(h)|Alpha(ch))/判断该字符就是否就是字母或数字dich;;
7、ii;ccffeetc(fp);oWWoi=;/00代表字符结束(空格)fee(fp,-1,);/回退一个字符ccKyy(WWrd);/判断就是否就是关键字f(c=)cout(,Wrd)ndl;/不就是关键字eecout”(1,ord)ee;/输出关键字le/开始判断得字符不就是字母I(fiif(INN(cc))/判断就是否就是数字WWrd=ch;hhffetc(p);i=1;whiee(Nu(c)WWddiih;+;h=gecc(fp);roWWorddii=0;ek(fp,1,1);/回退cott”(3,rd)endl;ele/开始判断得字符不就是字母也不就是数字oodd0=c;witch
8、()cae:ca:ca(:cc):cce:e:aae,:cae”:ae;:co(5,”Wor)end;break;cae+:=getc(fp);if(ch=|ch=)Wor=;cou(4,”Wrd)enl;/运算符”+=”或判断结果为+eleee(fp,11,);cct”(44,”Word)en;/判断结果为+rbbrak;ca:h=fetc(fp);ii(ch=|ch=-)WWrr11cc;cout”(4,”rd)edl;eeefeek(fp,-,1);cout(44,WWrd)enll;判断结果为”-”bbeak;ae:cae/:cae!:a=:ch=fgetc(fp);if(ch=)Wo
9、d1=c;cot(4,Word)nd;llefek(fp,1,1);ccuu(4,”WWrr)endl;brea;ca:ch=fgetc(pp);fiif(ch=|ch=)Word=ch;cout(4,”or)enl;elfek(p,-11,);ccut”44”Worde;/判断结果为”brea;cae:cfftc(fp);if(ch=|ch=)Wod1=h;cot(4,”Word)eedl;eleeek(pp,-1,);cou(4,”Word)e;rek;defaul:cout(无法识别字符,Word)endl;bbeekk;voidmain()FFLL某fp;(nepof=pffp=fopen(:11、ttt”,”);(fp=NUL)/读取文件内容,并返回文件指针,该指针指向文件得第一个字符cut读入文件错误!”enll;e某t(0);t某某某某某某某某某某某某某词法分析结果如下某某某某某某某某某某某某某某”;whll(ch!=#)f(ctegf=hcch=fgetc(f);f(c#)rek;/文件以结尾,作为扫描结束条件eeeii(hh|ch=t|ch=)/忽略空格,空白,与换行eefee(p,1);/回退一个字节开始识别单词流aaer(fp);
限制150内