编译原理-词法分析器-实验报告

上传人:F****n 文档编号:99618315 上传时间:2019-09-20 格式:DOC 页数:10 大小:96KB
返回 下载 相关 举报
编译原理-词法分析器-实验报告_第1页
第1页 / 共10页
编译原理-词法分析器-实验报告_第2页
第2页 / 共10页
编译原理-词法分析器-实验报告_第3页
第3页 / 共10页
编译原理-词法分析器-实验报告_第4页
第4页 / 共10页
编译原理-词法分析器-实验报告_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《编译原理-词法分析器-实验报告》由会员分享,可在线阅读,更多相关《编译原理-词法分析器-实验报告(10页珍藏版)》请在金锄头文库上搜索。

1、词法分析器实验报告实验目的:设计、编制、调试一个词法分析子程序识别单词,加深对词法分析原理的理解。功能描述:该程序要实现的是一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。(遇到错误时可显示“Error!”,然后跳过错误部分继续进行)设计思想:设计该词法分析器的过程中虽然没有实际将所有的状态转移表建立出来,但是所用的思想是根据状态转移表实现对单词的识别。首先构造一个保留字表,然后,每输入一个字符就检测应该进入什么状态,并将该字符连接到d串后继续输入,如此循环,最后根据所在的接受状态以

2、及保留字表识别单词。符号表:记号类别属性值ws-const保留字1var保留字1call保留字1begin保留字1if保留字1while保留字1do保留字1odd保留字1end保留字1then保留字1procedure保留字1=运算符2运算符2=运算符2运算符2运算符2=运算符2*运算符2+运算符2-运算符2/运算符2:=运算符2ident标识符3number常数4(分隔符5)分隔符5;分隔符5,分隔符5.分隔符5状态转换图:标识符及保留字:Startletterletter or digittnumber:70214365startotherdigit.digitE+ | -digitdig

3、itdigitdigitEdigit*otherother关系操作符:startother= (=other=* (, 2) (=, 2)(, 2):=(:=,2)分隔符:start;(),.( ; ,5)( (,5)( ),5)( , ,5)( . ,5)算术运算符:start+-*/( + ,2)( -,2)( *,2)( / ,2)使用环境:Windows xp下的visual c+6.0程序测试:input1 :int a,b;a=b+2;input2:while(a=0)do7x=x+6.7E+23;end;input3:begin:x:=9if x0 then x:=x+1;whi

4、le a:=0 dob:=2*x/3,c:=a;end;电视墙也就是电视背景装饰墙,是居室装饰特别是大户型居室的重点之一,在装修中占据相当重要的地位,电视墙通常是为了弥补客厅中电视机背景墙面的空旷,同时起到修饰客厅的作用。因为电视墙是家人目光注视最多的地方,长年累月地看也会让人厌烦,所以其装修就尤为讲究output1:3,int3,a5,3,b5,;3,a2,=3,b2,+4,25,;output2:1,while5,(3,a2,=4,05,)1,doerror line 32,=3,x2,+4,6.7E+235,;1,end5,;output3:1,beginerror line 13,x2

5、,:=4,91,if3,x2,4,01,then3,x2,:=3,x2,+4,15,;1,while3,a2,:=4,01,do3,b2,:=4,22,*3,x2,/4,35,3,c2,:=3,a5,;1,end5,;测试结果与预期结果一致源程序代码:#include#includevoid main()int i=0,j,k=0,state=1,f=0,linenum=1;char a1110=const,var,call,begin,if,while,do,odd,end,then,procedure;char b,d40=0; freopen(input.txt,r,stdin); fr

6、eopen(output.txt,w,stdout); b=getchar(); while(b!=EOF)/*判断所输入字符是否为结束符*/if(b= |b=n|b=t)/*滤过空格、换行等分隔符号*/ if(b=n) linenum+;b=getchar();else if(b=a&b=A&b=a&b=A&b=0&b=9) di+=b;b=getchar();for(j=0;j11;j+)/*查询保留字表确定该单词是否是保留字*/ if(strcmp(d,aj)=0) printf(1,%sn,d); k=1; break;if(k=0)/*在保留字表中没有查到该单词,是标识符*/ printf(3,%sn,d);for(j=0;j=0&b=0&b=0&b=0&b=0&b=0&b=0&b=9) state=6;di+=b;b=getchar(); else state=7; break; case 7: f=1;break; case 8: f=1;break; if(state=7&(bz)&(bZ) printf(4,%sn,d); else if(state=7&(b=a&b=A&b=a&b=A&b=Z) di+=b;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号