- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
深圳大学编译原理实验报告蔡树彬实验二
深 圳 大 学 实 验 报 告
课程名称: 编译原理
实验项目名称: 词法分析技术及其应用
学院: 计算机与软件学院
专业: 软件工程
指导教师: 蔡树彬
报告人 学号:
实验时间: 2015年11月4日至12月30日
实验报告提交时间: 2015年12月31日
教务处制
实验目的与要求:
目的:针对状态矩阵、NFA、DFA、正规式、确定化算法、最小化算法、Thompson算法等词法分析应用问题,设计并实现相应的解决方案,通过设计FA相关类族,以及实现前述几个重要的算法,既加深对抽象的词法、自动机、正规式等形式语言理论基础概念的理解与掌握,也加强对面向对象程序编写能力和计算思维的培养。
要求:
第一部分: 无符号数的识别及DFA的应用
这部分又分为2个小实验
输入:一个文本文件(源代码文件)
输出:将源代码中的无符号数识别出来并输出到另一个文件中
示例:如果输入是“123*abc+def/99.2+9.9E+c”,那么输出是:(数字, 123),(其它,*abc+def/),(数字,99.2),(其它,+),(异常,9.9E+c)
说明:其它是非数字打头的字符串;异常是数字打头,但最后却是不符合定义的无符号数。
假设:用字符“ABCDEFGHIJK”(大写)分别表示数字0..9和.、E、+、-,那么,字符串“BCLD”表示数字“12E3”=12000;
输入:一个文本文件
输出:将隐藏在文本文件中的有效无符号数识别出来。
示例:如果输入是“BCD*abc+def/JJKC+JKJL+c”,那么输出是:(数字, 123)、(数字,99.2),无效(异常)的无符号数不输出
第二部分:DFA/NFA的读写及确定化、最小化算法
这部分又分为3个小实验
输入:一个文本文件(格式自定义)
输出:读入文件中的DFA/NFA,创建对应的DFA/NFA对象,再写回另一文件中。
示例:如果输入是“f(S,a)=A, f(A,b)=B, {B}” //假设默认开始状态是S,
那么输出是:K={S,A,B};Σ={a,b};f(S,a)=A, f(A,b)=B;S;Z={B}
输入:上一实验输出的NFA文件
输出:将读入的NFA进行确定化后,输出结果,需要考虑有/无(的情况。
输入:上一实验输出的DFA文件
输出:将读入的DFA进行最小化后,输出结果。
第三部分:正规式及其应用
这部分又分为3个小实验
Thompson方法的实现
输入:一个正规式
处理:创建与正规式对应的NFA对象,再将NFA对象写回文件,格式与前述实验相同,使得能够读回;
示例:如果输入是“a*b”,那么输出是:K={A , B , C , D , E , F};Σ={a, b};f(A,()=B, f(B,a)=C, f(C, ()=B, f(C, ()=D, f(A, ()=D, f(D, ()=E, f(E, b)=F;A;Z={F}
说明:优先级处理可用栈或递归,思路见算符优先分析法。概要来说,判断当前运算符与下一个运算符间的优先级,当前(下一个则计算(产生NFA),否则入栈或递归。
从正规式到DFA
将上述实验与前述实验连接起来,使得读入一个正规式文件,能输出一个DFA。正规式文件格式自定,通常每行一个正规式。
示例:如果正规式文件包括2行,每行分别是“a”和“b”,那么,输出的DFA实际上是“a | b”对应的DFA。
字符串的识别
输入:一个正规式文件和一个字符串文件
输出:判断字符串文件中的每个字符串,能否被正规式对应的DFA所识别
其次,再给每个正规式增加一个类别,识别到给定字符串符合某个特定正规式时,输出该类别。
示例:如果输入
a* 类A
b 类B
那么对字符串aaa输出:aaa,类A
方法、步骤:
要完成本实验,依据实验要求进行分解,需要完成的实验步骤是:
如何识别无符号数?
如何判断一个输入的字符串中,包括无符号数字?如何判断无符号数的开始?中间字符及结束?
首先定义一个数组,逐个判断输入的字符串中的字符是否属于数组,根据无符号数定义和状态转移图的字符串从如果‘d’,’·’,’E’,’+/-’
原创力文档


文档评论(0)