编译原理_词法分析器_实验报告(20220301233624).pdf

上传人:索**** 文档编号:76245172 上传时间:2023-03-08 格式:PDF 页数:10 大小:194.57KB
返回 下载 相关 举报
编译原理_词法分析器_实验报告(20220301233624).pdf_第1页
第1页 / 共10页
编译原理_词法分析器_实验报告(20220301233624).pdf_第2页
第2页 / 共10页
点击查看更多>>
资源描述

《编译原理_词法分析器_实验报告(20220301233624).pdf》由会员分享,可在线阅读,更多相关《编译原理_词法分析器_实验报告(20220301233624).pdf(10页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

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

2、以及保留字表识别单词。符号表:记号类别属性值ws-const 保留字1 var 保留字1 call 保留字1 begin 保留字1 if 保留字1 while 保留字1 do 保留字1 odd 保留字1 end 保留字1 then 保留字1 procedure 保留字1=运算符2 运算符2=运算符2 运算符2 运算符2=运算符2*运算符2+运算符2-运算符2/运算符2:=运算符2 ident 标识符3 number 常数4(分隔符5)分隔符5;分隔符5,分隔符5.分隔符5 状态转换图:标识符及保留字:number:关系操作符:Start letter letter or digitt 0 2

3、1 4 3 65 start digit.digit E+|-digit digit digit digit E digit other other 分隔符:start other=(=other =*(,2)(=,2)(,2):=(:=,2)算术运算符:使用环境:Windows xp 下的 visual c+6.0 程序测试:input1:int a,b;a=b+2;start;(),.(;,5)(,5)(),5)(,5)(.,5)start+-*/(+,2)(-,2)(*,2)(/,2)input2:while(a=0)do 7x=x+6.7E+23;end;input3:begin:x:

4、=9 if x0 then x:=x+1;while a:=0 do b:=2*x/3,c:=a;end;output1:3,int 3,a 5,3,b 5,;3,a 2,=3,b 2,+4,2 5,;output2:output2:1,while 5,(3,a 2,=4,0 5,)1,do error line 3 2,=3,x 2,+4,6.7E+23 5,;1,end 5,;output3:output3:1,begin error line 1 3,x 2,:=4,9 1,if 3,x 2,4,0 1,then 3,x 2,:=3,x 2,+4,1 5,;1,while 3,a 2,:

5、=4,0 1,do 3,b 2,:=4,2 2,*3,x 2,/4,3 5,3,c 2,:=3,a 5,;1,end 5,;测试结果与预期结果一致源程序代码:#include#include void 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);freopen(output.txt,w,stdout);b=getchar();while(b!=

6、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=

7、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;b=getchar();printf(error line%dn,linenum);else printf(error line%dn,linenum);for(j=0;j=i;j+)dj=0;i=0;f=0;state=1;else if(b=)/*识别 、=和*/di+=b;b=getcha

8、r();if(b=|b=)di+=b;b=getchar();printf(2,%sn,d);for(j=0;j=i;j+)dj=0;i=0;else printf(2,%sn,d);for(j=0;j)/*识别 和=*/di+=b;b=getchar();if(b=)di+=b;b=getchar();printf(2,%sn,d);for(j=0;j=i;j+)dj=0;i=0;else printf(2,%sn,d);for(j=0;j=i;j+)dj=0;i=0;else if(b=:)/*识别:=*/di+=b;b=getchar();if(b=)di+=b;b=getchar();

9、printf(2,%sn,d);else printf(error line%dn,linenum);for(j=0;j=i;j+)dj=0;i=0;else if(b=*|b=+|b=-|b=/|b=)/*识别运算符*/printf(2,%cn,b);b=getchar();else if(b=(|b=)|b=,|b=;|b=.)/*识别分隔符*/printf(5,%cn,b);b=getchar();else printf(error line%dn,linenum);b=getchar();实验心得:此次实验让我了解了如何设计、编制并调试词法分析程序,并加深了我对词法分析器原理的理解;熟悉了直接构造词法分析器的方法和相关原理,并学会使用c 语言直接编写词法分析器;同时更熟练的掌握用c 语言编写程序,实现一定的实际功能。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 研究报告 > 其他报告

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com