实验1 词法分析器优选.docx

上传人:b****6 文档编号:7116527 上传时间:2023-01-19 格式:DOCX 页数:11 大小:81.61KB
下载 相关 举报
实验1 词法分析器优选.docx_第1页
第1页 / 共11页
实验1 词法分析器优选.docx_第2页
第2页 / 共11页
实验1 词法分析器优选.docx_第3页
第3页 / 共11页
实验1 词法分析器优选.docx_第4页
第4页 / 共11页
实验1 词法分析器优选.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

实验1 词法分析器优选.docx

《实验1 词法分析器优选.docx》由会员分享,可在线阅读,更多相关《实验1 词法分析器优选.docx(11页珍藏版)》请在冰豆网上搜索。

实验1 词法分析器优选.docx

实验实验1词法分析器优选词法分析器优选青岛理工大学实验报告实验课程:

编译原理实验日期:

2014年5月28日交报告日期:

2014年6月4日成绩:

实验地点:

现代教育技术中心101(计算机实验室)计算机工程学院,计算机科学与技术专业,班级:

计算113实验指导教师:

批阅教师:

同组学生姓名学号一、实验目的设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。

二、实验要求1.待分析的简单语言的词法1)关键字:

beginifthenwhiledoend所有关键字都是小写。

2)运算符和界符:

:

=+*/=;()#3)其他单词是标识符(ID)和整型常数(NUM),通过以下正规式定义:

ID=letter(letter|digit)*NUM=digitdigit*4)空格由空白、制表符和换行符组成。

空格一般用来分隔ID、NUM,运算符、界符和关键字,词法分析阶段通常被忽略。

2.各种单词符号对应的种别码单词符号种别码单词符号种别码begin1long21if2end22else3letter(letter|digit)*23then4digitdigit*24while5*25do6/26for7+27switch8-28case9:

29until10:

=30break1131goto1233constant13=34return14=37float16=38double17;39string18(40char19)41short20#003.词法分析程序的功能输入:

所给文法的源程序字符串。

输出:

二元组(syn,token或sum)构成的序列。

其中:

syn为单词种别码;token为存放的单词自身字符串;sum为常数。

例如:

对源程序beginx:

=9;ifx0thenx:

=2*x+1/3;end#经词法分析后输出如下序列:

(1,beigin)(10,x)(18,:

=)(11,9)(26,;)(2,if).三、算法思想1.主程序示意图主程序示意图如下所示:

其中初值包括如下两个方面。

1)关键字表的初值。

关键字作为特殊标识符处理,把它们预先安排在关键字表,当扫描程序识别出标识符时,查关键字表。

若查到匹配的单词,则该单词为关键字,否则为一般标识符。

关键字表作为一个字符串数组,其描述如下:

char*rwtab22=begin,if,else,then,while,do,for,switch,case,until,break,goto,constant,return,int,float,double,string,char,short,long,end;2)程序中的主要变量为syn,token和sum。

2.扫描子程序的算法思想首先设置3个变量:

token用于存放构成单词符号的字符串;sum用于存放整型单词;syn用于存放单词符号的种别码。

3.词法分析程序流程图四、结果分析及讨论1.正确输入演示输入测试语句:

begininti=12;if(i=12)y=1;elsez=1;end#运行结果如下所示:

分析:

测试语句中不存在无法识别的字符,运行正确。

2.错误输入输入测试语句:

begindox=;while(z=$);end#运行结果如下:

分析:

测试语句中存在无法识别的符号、$,因此出现报错提示,提示中将显示无法识别的符号所在行号。

五、总结通过此次实验,使我们了解到如何设计、编制并调试词法分析程序。

在实验的过程中加深了对词法分析原理的理解;熟悉了构造词法分析程序的手工方式的相关原理;能够根据识别语言单词的状态转换图,使用某种高级语言直接编写词法分析程序。

六、源程序代码#include#include#includecharprog80,token8;charch;intsyn,p,m=0,n,row=0,sum=0;char*rwtab22=begin,if,else,then,while,do,for,switch,case,until,break,goto,constant,return,int,float,double,string,char,short,long,end;voidscaner()for(n=0;n=a&ch=A&ch=0&ch=a&ch=A&ch=Z)tokenm+=ch;ch=progp+;tokenm+=0;p-;syn=23;for(n=0;n=0&ch=0&ch32767)/数据范围越界syn=-1;elseswitch(ch)case)/符号:

syn=34;tokenm+=ch;elseif(ch=)/符号:

=syn=35;tokenm+=ch;else/符号:

:

m=0;tokenm+=ch;ch=progp+;if(ch=)/符号:

=syn=37;tokenm+=ch;else/符号:

syn=38;p-;break;case:

m=0;tokenm+=ch;ch=progp+;if(ch=)/符号:

:

=syn=31;tokenm+=ch;else/符号:

:

syn=30;p-;break;case*:

syn=26;token0=ch;break;/符号:

*case/:

syn=27;token0=ch;break;/符号:

/case+:

syn=28;token0=ch;break;/符号:

+case-:

syn=29;token0=ch;break;/符号:

-case=:

syn=38;token0=ch;break;/符号:

=case;:

syn=39;token0=ch;break;/符号:

;case(:

syn=40;token0=ch;break;/符号:

(case):

syn=41;token0=ch;break;/符号:

)case#:

syn=00;token0=ch;break;/符号:

#casen:

syn=-2;break;/换行操作,修改行数default:

syn=-1;break;/无法识别,报错voidmain()coutendl;cout*endl;cout1.ANALYSISOFSTRINGendl;cout2.EXITTHEPROGEAMendl;cout*endl;intchoose;coutPleaseenteryourchoice:

endl;scanf(%d,&choose);if(choose=1)/根据用户选择进行操作p=0;row=1;cout-endl;coutPleaseinputastringlikebegin*end#:

endl;docin.get(ch);progp+=ch;while(ch!

=#);p=0;cout-endl;coutTheanalysisprocessisasfollows:

endl;do/对用户输入字符串进行分析scaner();switch(syn)/数字输出:

(种别码,常数)case24:

cout(syn,sum)endl;break;/报错输出:

输出错误行数case-1:

coutErrorinrowrow!

endl;break;case-2:

row=row+;break;/其他输出:

(种别码,单词符号)default:

cout(syn,token)endl;break;while(syn!

=0);coutAnalysisoftheendendl;main();最新文件-仅供参考-已改成word文本-方便更改

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 院校资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1