词法分析器的设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
广州中医药大学医学信息工程学院
实验报告
课程名称:编译原理
专业班级:计算机科学与技术(12)级第一组
实验参与者(姓名、学号)刘加彦2012081026、李汝强2010131083张丰锦2012081017、张鹏燕2012081076
实验名称:设计SAMPLE语言的词法分析器
实验成绩:
课程类别:必修□限选 公选□其它□
实验三设计SAMPLE语言的词法分析器
实验时间:2015-5-14
一、实验目的
1、通过使用一定的编程工具设计sample语言的词法分析器,要求满足以下条件:
a)先输出作者姓名、班级、学号(可用汉语、英语或拼音);
b)请求输入测试程序名,键入程序名后自动开始词法分析并输出结果;
c)输出结果为单词的二元式序列(样式见样板输出1和2);
d)要求能发现下列词法错误并指出错误性质和位置:
a.非法字符,即不是SAMPLE字符集的符号;
b.字符常数缺右边的单引号;
c.注释部分缺右边的界符*/;
2、设计成功后,要求可以通过至少10类测试程序的测试。
二、实验方法
1、实验工具
a)Java语言;
b)Windows平台;
c)选用Eclipse开发工具编写程序,项目文件wordAnalysize,并做测试。
2、算法逻辑分析(重点)
a)有一个当前状态的变量,状态变量的初始值是开始符S。一个队列,存的是待处理程序的源代码。
b)按自动机,写IF语句。用一个大循环把它们包起来。
c)如果当前状态不是终态,并且队列的队首是一个不可解释的终结符(自动机中没有对应的边),则报错,当前状态复位到初始状态S。继续处理。
d)如果当前状态是终态,并且队列的队首是一个不可解释的终结符(自动机中没有对应的边),则识别,当前状态复位到初始状态S。并重新处理这个终结符。
e)如果当前状态是初态S,遇到空格、回车、文件结束符等无意义的字符,
均是回到初态S(即回到自己)。
3、自动机(算法逻辑图):图1
三、实验结果
1、测试代码1及结果
程序名code.txt:
and array begin bool call
case char constant dim do
else end false for if
input integer not of or
output procedure program read real
repeat set stop then to
true until var while write
abc 123 'EFG' ( ) * + , - . .. /
: := ; < <= <> = > >= [ ]
测试结果截图:
2、测试代码2及结果
程序名code.txt:(提示:更换测试程序内容,需要找源文件路径)program example2;
var A,B,C:integer;
X,Y:bool;
begin /* this is an example */
A:=B*C+37;
X:=’ABC’
end.
测试结果截图:
四、反思总结
1、实验前
认真分析老师所给题目、要求、实验标准,并查阅相关自动机的资料及
实验文档,确定大体思路绘制自动机,如图1。
2、实验过程中
1)绘制自动机:了解逻辑的重要性,保持清晰地思路;通过对知识点的深刻了解,认准实验关键下手;
2)编写代码:在这个阶段最容易出现错误,需要考虑算法设置的参数是否合理,算法的实现效率,算法的正确性以及其他细小的方面。小组
成员在面对算法出现问题时积极讨论做出合理的修改。
3)测试阶段:小组成员需考虑测试的代码是否可以包含尽量多的知识点,在最短的时间内测试并记录完整地结果,用以说明实验是否成功。
3、实验结果分析
算法仍存在不合理性,不够优化,希望可以通过与老师以及其他小组的
交流提高代码的质量。
4、团队分析
1)分工
2)总结:在本次实验中,我们小组的成员积极合作讨论得出实验成果,深刻认识到自动机在设计代码算法中起到的积极作用;在以后的开发
中借鉴自动机的思想优化算法。另外一方面,实验中各个成员积极合
作,体验合作的快乐,提高团队协作能力。