- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《编译原理及实践》上机实验报告
《编译原理及实践》上机实验报告
----(程序为黄远东同学编写)
课 程 编 译 原 理 及 实 践
实验名称 (1) 词法分析程序 (2) 语法语义分析程序
系 别 计 算 机 科 学 与 技 术 专 业
班 级 计 科 0105 组 别 0
姓 名 浦 剑 学 号 26
上机实验日期 2004年 5月 1日
完成报告日期 2004年 5月 17日
报 告 退 发 ( 订正 、重做 )
教师审批签字
实 验 一
[一、实验名称] 词 法 分 析 程 序
[二、实验目的]
1、构造一个自己定义的小型语言的词法分析程序,程序要求能对输入的字符串流进行词法分析。
2、在实验的过程中,学会应用单词分析的方法——构造NFA(非确定有穷自动机)和DFA(确定有穷自动机)。
[三、实验内容及要求]
编写能对任一右线性正则文法进行词法分析的程序。要求如下:
程序能根据上述文法构造非确定有穷自动机NFA;
程序能将得到的NFA转换成确定有穷自动机DFA并最小化之;
程序能根据上面得到的DFA对任给的一个输入串进行词法分析的程序;
程序的输出为单词的token序列$(CLASS, VALUE)(检查出错的单词输出时将 ’ $ ’ 改为 ’ ! ’ 。
[四、实验环境]
CPU:Mobile Intel? Celeron? 1.5GHz 内存:512MB
操作系统:Microsoft Windows Server 2003 Enterprise Edition
编译工具:Microsoft Visual Studio.NET
[五、逻辑框图(程序)]
(见下页)
[六、程序源代码]
这是对程序的主要的几个源代码文件的简要说明,需要查看源程序请打开随附本文档的源程序文件。
Project 1: Syntax2DFA
[ PlanarList.h , PlanarList.cpp ]
一个用deque_Ty实现的通用二维表类CPlanarList和一个包含用于操作整形(int[])数组的一组函数的名字空间My_Int_Set:
对二维表类的说明:
表中的每一个元素是一个由整形(int[])数组实现的集合,对集合的操作由名字空间My_Int_Set里的函数完成;
表可以初始化为m行n列,也可以在程序运行时动态添加或删除任意行数和列数;
可以得到表中任一元素(数组)的所有值,同时亦可改变之;
可以按行或按列遍历表中元素,亦可遍历表中任一元素(集合或数组)中的任一元素;
对表中每一元素(集合或数组)的操作属于集合操作(可向集合中添加或删除一个或多个元素、可以计算集合规模);
对名字空间My_Int_Set的说明:
它是一组集合操作函数;
可以向集合中添加一个或多个元素、删除一个元素、清空集合,并可以打印集合中的元素;
可以将集合作为数组进行遍历。
[ FiniteATM.h , FiniteATM.cpp ]
一个基于二维表类CPlanarList的有穷自动机类CFiniteATM ,下面是关键函数说明:
void InitNFA(row_no rows = 1, col_no cols = DEFAULT_COLS, element_no els = DEFAULT_ELS); //初始化NFA二维表
int GetNFA(const char* fpath);//从文法文件路径fpath读取文法,并得到该文法的NFA;
void SaveDFA(const char* fpath);//保存DFA到fpath指定的文件中;
void PrintNFA(const char* fpath);//打印NFA
void PrintDFA(const string fpath);//打印DFA
void NFA2DFA();//将NFA转换为DFA
void Minimize();//最小化DFA
int epsilon_closure(sts_no sts);//对NFA中的元素求ε- closure
[ Syntax2DFA.cpp]
本工程的主要文件:包含由文法得到NFA和DFA的主控过程。
定义一个有穷自动机类CFinitATM 的变量,由传入的文法文件路径参数通过调用GetNFA(), NFA2DFA(), Minimize(), PrintNFA(), PrintDFA(), SaveDFA()等函数得到文法DFA,打印相关信息并保存DFA到文件中。
Project2: LexWithDFA
[ LexWithDFA.cpp]
本工程的主要文件:读入由工程Syntax2DFA得到
文档评论(0)