- 36
- 0
- 约4.69千字
- 约 11页
- 2016-09-21 发布于重庆
- 举报
DFA编程实现报告
实验一 DFA的编程实现
实验目的:
通过本次实验,加深对DFA及其识别的语言的理解,学习对一般的DFA的表达方
法与编程实现方法。
实验任务:
编写一个C语言程序,模拟实现DFA识别字符串的过程。
实验内容:
(1)DFA的输入;
(2)DFA的存储与读写;
(3)DFA的正确性检查;
(4)DFA的语言集列表显示;
(5)DFA的规则字符串判定;
四、实验分析:
DFA的初始化
一个DFA的基本信息 状态集、字符集、开始状态、结束状态集、状态转换表状态转换表
字符串判断
初始化一个DFA,后可以通过一下算法判断一个字符串是否符合该DFA。
判定算法概要:
准备:开始状态s0, 接受状态集F, 状态转换表T(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 ();
对DFA的存储与读写
将DNF的信息写入文件中,
第一行:字符集;
第二行:状态集;
第三行:开始状态;
第四行:结束状态集;
以下行写入状态转换
按照既定的规定读取文件
中的数据将其赋值,然后
初始化DFA即可;
DFA的语言集列表显示:
这一个模块应该是这个实验中比较难的一部分了。我并没有使用while循环的这个做法。而是用函数递归,通过所有字符集的路径去遍历整个DFA。最后将符合条件的字符串输出;
void Traversal(char present, int N,string strass=)//遍历DFA的语言集列表
{
if(present==N||N0)//若路径已经大于N或者当前状态错误,停止递归
return;
N--;
if(FinalStates.find(present)!=FinalStates.npos)
{
cout该自动机识别字符串:strassendl;
}
for(int i=0;iAlphabet.length();i++)
{
string temp;
temp=strass;
strass+=Alphabet[i];
Traversal(move(present,Alphabet[i]),N,strass);
strass=temp;
}
}
递归终止条件的判断。
当N-- 时, N小于0,或者遍历到无路可走是便终止
遇到的问题:
对于递归的终止条件写得不够明确。 递归前对字符串赋值strass赋值,递归后应该还原,这一点没有想到。调试了很久。 总结,对递归的具体编写 还是不熟悉。
目前的代码,字符集和状态只能是一个字符,若要优化可以用vectorstring容器存储即可;
实验用例:
实验结果:
DFA的初始化
判断字符串:
显示小于N的语言集:
读取DFA文件:
五、实验总结:
在这次实验中,学习对一般的DFA的表达方法与编程实现方法。对课本提供的算法有了更深刻的认识。在编写和调试代码的过程中对自身的编程能力也有了很大的提高。对自动机和其识别语言有了更透彻的理解。在动手编程之前一定要好好明确实验的理论准备和思路的理清,能帮助我们在实验过程中少走更多的弯路。总之在这次实验中收获很多,提高了动手能力和分析问题的能力。
源代码:
//构造一个DFA
#includeiostream
#includestring
#includevector
#includefstream
using namespace std;
class TransitionTable
{
public:
char present; //当前状态
char next; //下一状态
char input; //输入字符
TransitionTable(char P,char I,char D)
{
present=P;
next=D;
input=I;
}
};
class DFA
{
public:
DFA()
{
cout1、手动输入,2、读取txt文件endl;
int select;
cinselect;
if(select==1)
inti();
if(select==2)
read();
}
string States; //状态集
char Star
您可能关注的文档
- DELL服务器阵列卡配置.doc
- vs2010软件c++生成dll库.docx
- VS2012Win7安装.docx
- DELL本本重建Recovery分区,恢复F8功能.doc
- DELL查看raid卡配置报错.docx
- VSAT卫星通信系统.doc
- dell电脑win8改win7系统.doc
- dell灵越15r拆机教程键盘.doc
- Dell笔记本BIOS设置介绍.doc
- VSD负压引流装置.doc
- (2026春新版)部编版八年级语文下册《第一单元》PPT课件.pptx
- 2018电力监控系统网络安全监测装置技术规范.docx
- 2022电力监控系统安全防护方案审核要点.docx
- 2014电力电缆光伏系统EN 50618欧标.docx
- (2026春新版)人教版二年级数学下册《第三单元 万以内数的认识》教案.docx
- (2026春新版)人教版二年级数学下册《第四单元 万以内的加法和减法》教案.docx
- (2026春新版)人教版二年级数学下册《综合与实践 时间在哪里》教案.docx
- (2026春新版)苏教版二年级数学下册《综合与实践 时间有多长》教案 .pdf
- (2026春新版)部编版三年级语文下册第3单元(教案).docx
- (2026春新版)部编版三年级语文下册第8单元(教案).docx
原创力文档

文档评论(0)