《DFA的编程实现含源代码实验报告剖析》由会员分享,可在线阅读,更多相关《DFA的编程实现含源代码实验报告剖析(20页珍藏版)》请在人人文库网上搜索。

1、实验一(一)程序设计语言及其编译器实现概览(2小时) 实验目的:学习一门简单的程序设计语言的定义及其编译器实现 实验任务:针对一门简单的程序设计语言,阅读其定义文档,初步了解其编译器的源代码。 实验内容: (1)选择一门语言:TINY或其它语言也可(需自备其编译器的源代码)。 (2)阅读其定义文档,了解语言定义的方法,包括:词法、语法、语义、运行时环境、目标机器、目标语言等内容。 (3)了解其编译器源代码。 ? 对TINY语言编译器,其源代码由多个文件组成,请弄清楚每个文件的作用是什么。详情请见编译原理及实践第1.7节。请做一个C+工程文件(Win32 Console Application,。

2、 tiny.dsp),把它们组织起来,然后编译成可执行文件(tiny.exe),即为TINY语言编译器。然后用它编译TINY语言示例源代码(sample.tny)。看看编译生成的目标文件(sample.tm)是怎样的。要运行目标程序,还需要一个虚拟机,名为TM机。TM机是以软件形式存在的,其源代码为tm.c,需要编译生成可执行文件tm.exe。然后将目标程序作为TM机的输入运行TM机即可得到所期待的结果。要求读懂main.c、globals.h、util.h、scan.h和util.c、scan.c等文件,三人一组进行讨论,给每一行加上注释,总结你们各自对程序的理解和阅读程序的收获,每组提交1。

3、份加了注释的文件和心得。有能力的同学可加上tm.c。 实验一(二)DFA的编程实现(2小时) 实验目的:通过本次实验,加深对DFA及其识别的语言的理解,学习对一般的DFA的表达方法与编程实现方法。 实验任务:编写一个C语言程序,模拟实现DFA识别字符串的过程。 实验内容:(1)DFA的输入;(2)DFA的存储与读写;(3)DFA的正确性检查;(4)DFA的语言集列表显示;(5)DFA的规则字符串判定; 内容说明: (1)DFA的输入: 分别输入DFA的“字符集”、“状态集”、“开始状态”、“接受状态集”、“状态转换表”等内容,并保存在设定的变量中。 (2)DFA的存储与读写: 将上述DFA的五。

4、元组保存在一个文本文件中,扩展名指定为.dfa。请自行设计DFA文件的存储格式,并说明其含义。能将保存在内存变量中的DFA写入DFA文件,也能将DFA文件读入内存中。(思考:对稀疏DFA(转换表中为空的地方较多)或用“或”表达转换的DFA(如下的测试用例三),如何改进DFA转换表的表达。) (3)DFA的正确性检查: 检查所有集合的元素的唯一性。 检查“开始状态”是否唯一,并是否包含在“状态集”中。 检查“接受状态集”是否为空,并是否包含在“状态集”中。检查“状态转换表”是否满足DFA的要求。 检查“状态转换表”并非填满时的处理是否得当 (4)DFA的语言集列表显示: 输入待显示的字符串的最大。

5、长度N,输出以上定义的DFA的语言集中长度N的所有规则字符串。(提示:注意算法中while循环的次数) (5)DFA的规则字符串判定: 输入(或用字符集随机生成)一个字符串,模拟DFA识别字符串的过程判定该字符串是否是规则字符串(属于DFA的语言集)。 测试用例: DFA(一) DFA(二) DFA(三) 实验要求: 选择”的算法case双层+循环while按照编译原理及实践参考书第二章中描述的“编程实现一般的DFA。 要求能通过以上三个测试用例的测试。 完成内容中(1)(5)部分,可得C。 完成内容中(1)(2)(5)部分,可得B。 完成内容中(1)(2)(4)(5)部分,可得A。 完成全部。

6、内容,可得奖励。 判定算法概要: 准备:开始状态s, 接受状态集F, 状态转换表T(s, c), s?S, c? 0c = getchar(); s = 开始状态s; 0while ( c != EOF ) / 输入未结束则循环 s = T(s, c); if (s = NULL) error(); c = getchar(); if (s ? 接受状态集F) accept (); else error (); 通用DFA存储格式的建议:(用以上的第三个测试DFA为例) 3 / 字符集中的字符个数 (以下两行也可合并成一行) / * o / 以空格分隔的字符集。O代表任意非/和*的字符 5 /。

7、 状态个数 (以下两行也可合并成一行) 1 2 3 4 5 / 状态编号。若约定总是用从1开始的连续数字表示,则此行可省略 1 / 开始状态的编号。若约定为1,则此行可省略 1 / 结束状态个数。若约定为1,则此行可省略 5 / 结束状态的编号 2 -1 -1 / 状态1的所有出去的转换。按字符集中的字符顺序给出。-1表示出错状态 -1 3 -1 3 4 3 5 4 3 -1 -1 -1 实验报告: 同时上交纸质报告与电子版报告。纸质报告以实验分析、实验中遇到的问题及解决方法、实验测试(含屏幕截图)、实验心得等为主,不得大量引用源程序(引用源程序总行数不得超过100行)。电子版报告以源程序、测。

8、试用例、输出文件等为主,包括纸质报告的电子版,须确保提并的源程序能编译运行,否则不要上交。电子版请发送到248133074qq.com,邮件标题请写明学号、姓名与实验编号,形如: 。不得抄袭实验报 告与源程序,否则后果自负!提高内容: (1)图形化的用户界面; (2)任意DFA的状态转换图、状态转换表的图形绘制; 附实验报告 源码 实验一DFA的编程实现 实验目的: 通过本次实验,加深对DFA及其识别的语言的理解,学习对一般的DFA的表达方法与编程实现方法。 实验任务: 编写一个C语言程序,模拟实现DFA识别字符串的过程。 实验内容: (1)DFA的输入;(2)DFA的存储与读写;(3)DFA。

9、的正确性检查;(4)DFA的语言集列表显示;(5)DFA的规则字符串判定; 实验分析: DFA的初始化 一个DFA的基本信息 状态集、字符集、开始状态、结束状态集、状态转换表; 在程序中状态集、字符集、开始状态、结束状态集都用string类型来表示,即可不用考虑用户输入内容的长度。但缺点是字符集只能是字符而不可以是字符串。 状态转换表:为三个字符的字符串,第一个为当前状态,第二个为输入字符,第三个为下一状态。 用vector容器存放转换函数的内容 字符串判断 DFADFA初始化一个,后可以通过一下算法判断一个字符串是否符合该。 判定算法概要: 准备:开始状态s0, 接受状态集F, 状态转换表T。

10、(s, c), s?S, c? c = getchar(); s = 开始状态s0; while ( c != EOF ) / 输入未结束则循环 s = T(s, c); if (s = NULL) error(); c = getchar(); if (s ? 接受状态集F) accept (); else error (); 在实际编写代码中的体现为 void identify() /判断字符串 coutstr; int i=0; char present=StartStates; while (i容器存储即可; 实验用例:实验结果: 的初始化DFA判断字符串: 显示小于N的语言集: 文件。

11、:DFA读取实验总结: 在这次实验中,学习对一般的DFA的表达方法与编程实现方法。对课本提供的算法有了更深刻的认识。在编写和调试代码的过程中对自身的编程能力也有了很大的提高。对自动机和其识别语言有了更透彻的理解。在动手编程之前一定要好好明确实验的理论准备和思路的理清,能帮助我们在实验过程中少走更多的弯路。总之在这次实验中收获很多,提高了动手能力和分析问题的能力。 源代码: /构造一个DFA #include #include #include #include using namespace std; class TransitionTable public: char present; /当。

12、前状态 char next; /下一状态 char input; /输入字符 TransitionTable(char P,char I,char D) present=P; next=D; input=I; ; class DFA public: DFA() coutselect; if(select=1) inti(); if(select=2) read(); string States; /状态集 char StartStates; /开始状态 string FinalStates; /结束状态集 string Alphabet; /字符集 vector Trans; /转换函数 vo。

13、id inti() /初始化自动机 潣瑵?请输入有限状态集S:States; 潣瑵?请输入字符集A:Alphabet; 潣瑵?请输入转换函数MOVE -格式为:当前状态-输入字符-下一状态:(输入#结束输入)input; if(strcmp(input,#)=0) break; TransitionTable Temp(input0,input1,input2); Trans.push_back(Temp); 潣瑵?请输入开始状态集S0:StartStates; 潣瑵?请输入结束状态集F:FinalStates; void identify() /识别字符串 潣瑵?请输入字符串:str; int i=0; char present=StartStates; while(iN; example.Traversal(example.StartStates,N); example.write(); system(pause); return 0; /*测试用例 输入状态转换表 0a1 0b2 1b2 2a1 1a3 2b3 3a3 3b3 # 0a1 0b2 2a1 1b2 1a3 2b5 3a3 5b5 3b4 5a6 6b4 4a6 6a3 4b5 */。

DFA的构造C语言,DFA的编程实现含源代码实验报告剖析相关推荐

  1. 网络协议命令行处理c语言程序解析,网络协议工程SPIN实验报告剖析.doc

    网络协议工程SPIN实验报告剖析 网络协议工程SPIN实验报告 摘 要:本文主要介绍了一种基于模型检测的协议自动分析工具SPIN的使用.对经典的AB协议在理想状态.信道有误码无丢失和信道有误码有丢失三 ...

  2. 哈工大 c语言测试与系统控制 ad,哈工大——c语言在测量与控制中应用实验报告.pdf...

    哈工大--c语言在测量与控制中应用实验报告 Harbin Institute of Technology Harbin Institute of Technology C 语言在测量与控制中的 C 语 ...

  3. 五猴分桃c语言课程设计,c语言程序设计五猴分桃问题实验报告.doc

    c语言程序设计五猴分桃问题实验报告.doc 课程设计报告学院.系:吉林大学珠海学院计算机科学与技术系专业名称:软件工程课程设计科目C语言程序课程设计所在班级:10班学生学号:04121010学生姓名: ...

  4. 20165230 《Java程序设计》实验五《网络编程与安全》实验报告

    20165230 <Java程序设计>实验五<网络编程与安全>实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:田坤烨 学号:20165230 成绩: ...

  5. c语言五猴分桃案例分析,C语言程序设计五猴分桃问题实验报告.doc

    C语言程序设计五猴分桃问题实验报告 课 程 设 计 报 告 学院.系:吉林大学珠海学院计算机科学与技术系专业名称:软件工程课程设计科目C语言程序课程设计所在班级:10班学生学号:学生姓名:赵学文指导教 ...

  6. java的网络编程设计报告_20165230 《Java程序设计》实验五《网络编程与安全》实验报告...

    20165230 <Java程序设计>实验五<网络编程与安全>实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:田坤烨 学号:20165230 成绩: ...

  7. 20162330 实验五 《网络编程与安全》 实验报告

    2016-2017-2 实验报告目录: 1 2 3 4 5 20162330 实验五 <网络编程与安全> 实验报告 课程名称:<程序设计与数据结构> 学生班级:1623班 学生 ...

  8. 2017-2018-2 20165301 实验五《网络编程与安全》实验报告

    2017-2018-2 20165301 实验五<网络编程与安全>实验报告 一.网络编程与安全-1 实验要求: 参考http://www.cnblogs.com/rocedu/p/6766 ...

  9. 2018-2019-2 20175204 张湲祯 实验五《网络编程与安全》实验报告

    2018-2019-2 20175204 张湲祯 实验五<网络编程与安全>实验报告 实验五<网络编程与安全> 一.实验内容: 1.网络编程与安全-1 任务详情 两人一组结对编程 ...

最新文章

  1. php中使用mysql_fetch_array输出数组至页面中展示
  2. 使用 UpdatePanel 【转by Dorian Deng】
  3. 【Android 逆向】逆向修改游戏应用 ( APK 解析工具 | 解包 -> 分析 -> 重打包 -> 签名 流程 )
  4. 写1行代码影响1000000000人,这是个什么项目?
  5. JQuery常用的代码片段
  6. 牛笔了!Android面试真题解析火爆全网,面试必备
  7. 真正优秀的人,都有这3种习惯
  8. 很详细的“追女生技巧”
  9. 识别图片并可视化_数据可视化3大发展方向
  10. 035 spring amqp
  11. 操作系统思考 第五章 更多的位与字节
  12. 计算机服务重置,怎么重置电脑网络设置
  13. 当Eclipse出现“initializing java tooling has encountered a problem”的解决方法
  14. 如何通过芯片手册寻找操作GPIO
  15. 浅析Windows通信编程
  16. Python爬虫实战,QQ音乐爬取全部歌曲
  17. NBUT 1225 NEW RDSP MODE I
  18. 信息学奥赛与大学计算机课程,信息学是什么课程
  19. 营销软文的结尾怎样写?营销软文结尾怎样去设计?
  20. 测试透射晶格分析的软件,透射电镜(TEM)电子衍射在晶体结构分析中的应用

热门文章

  1. 移动端自动化==什么是Appium
  2. linux socket使用情况 ss -s ss -t -a | cat /proc/net/socketstat
  3. Clipboard.js:不用Flash实现剪贴板功能的轻量级JavaScript库
  4. 马哥-51CTO-Linux培训-0910-程序包管理
  5. 《使用Nessus进行渗透测试》- 简介
  6. C++ new delete(二)
  7. Struts国际化步骤
  8. 树回归--python Tkinter库创建GUI(2)
  9. C# Activator
  10. Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko