编译原理实验_词法分析

编译原理实验_词法分析

ID:11130454

大小:75.50 KB

页数:7页

时间:2018-07-10

编译原理实验_词法分析_第1页
编译原理实验_词法分析_第2页
编译原理实验_词法分析_第3页
编译原理实验_词法分析_第4页
编译原理实验_词法分析_第5页
资源描述:

《编译原理实验_词法分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、编译原理词法分析程序一、实验目的构造词法分析程序,程序要求能对输入的字符串流进行词法分析。在试验过程中,学会应用单词分析的方法——NFA(非确定有限自动机)和DFA(确定有限自动机),加深对词法分析原理的理解。二、实验内容了解语言的基本词法,并为之构造一个不确定有限自动机NFA,并将其转换成确定有限自动机DFA;然后一句此DFA编写词法分析程序。三、实验参考(一)惯用的词法(1)关键字functionifthenwhiledoendfunc所有关键字都是保留字,并且必须是小写。(2)专用符号=+-*/<<=!=>>===;

2、()#(3)其他单词是标识符(id)和整形常数(num),通过下列正则式定义。id=letter(letter

3、digit)*num=digitdigit*letter=a

4、…

5、z

6、A

7、…

8、Zdigit=0

9、…

10、9小写和大写字母是有区别的。(4)空格由空白、换行符和制表符组成。空格一般用来分隔id、num、运算符和关键字,词法分析阶段通常被忽略。(5)各种单词符号对应的种别码如图所示:单词符号种别码function1if2then3while4do5endfunc6Letter(letter

11、digit)*10digitd

12、igit*11+13-14*15/16=18<20<=21!=22>23>=24==25;26(27)28#0(二)词法分析程序的功能(1)输入为所给文法的源程序字符串。(2)程序的输出形式为单词串的输出形式。所输出的每一单词,均按形如(syn,token和sun)的二元式编码。其中,syn为单词种别码;token为存放的单词自身字符串;sum为整形常数。(3)测试源程序输入。Functionx=9;ifx>0thenx=2*x+1/3;endfunc#(4)输出结果。(1,function)(10,’x’)(18,=)(

13、11,9)(26,;)(2,if)……(三)算法设计思想为翟玉庆老师上课所讲。一、实验源程序#include#includecharprog[80],token[8];charch;intsyn,p,m,n,sum;char*rwtab[6]={"function","if","then","while","do","endfunc"};voidscaner();main(){p=0;printf("pleaseinputstring:");do{scanf("%c",&ch);p

14、rog[++p]=ch;}while(ch!='#');//for(inti=0;i<80;i++)//printf("%c",prog[i]);p=0;do{scaner();switch(syn){case11:printf("(%d,%d)",syn,sum);break;case-1:printf("erron");break;default:printf("(%d,%s)",syn,token);}}while(syn!=0);}voidscaner(){for(n=0;n<8;n++)token[n

15、]=NULL;ch=prog[++p];while(ch==''

16、

17、ch==''

18、

19、ch=='t')ch=prog[++p];if(ch>='a'&&ch<='z'){m=0;while((ch>='a'&&ch<='z')

20、

21、(ch>='0'&&ch<='9')){token[m++]=ch;ch=prog[++p];}token[m]='';ch=prog[--p];syn=10;for(n=0;n<6;n++)if(strcmp(token,rwtab[n])==0){syn=n+1;break;}}els

22、eif(ch>='0'&&ch<='9'){sum=0;while(ch>='0'&&ch<='9'){sum=sum*10+ch-'0';ch=prog[++p];}ch=prog[--p];syn=11;}elseswitch(ch){case'<':m=0;token[m++]=ch;ch=prog[++p];if(ch=='='){syn=22;token[m+1]=ch;}else{syn=20;ch=prog[--p];}break;case'>':m=0;token[m++]=ch;ch=prog[++p];

23、if(ch=='='){syn=24;token[m++]=ch;}else{syn=23;ch=prog[--p];}break;case'=':m=0;token[m++]=ch;ch=prog[++p];if(ch=='='){syn=25;token[m++]=ch;}else{syn=18;c

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。