编译原理实验六dfa最小化.pdfVIP

  • 38
  • 0
  • 约6.23千字
  • 约 11页
  • 2021-10-10 发布于湖南
  • 举报
实验六: DFA 最小化 一:要求 输入: DFA。 输出: 最小化的 DFA 。 二:实验目的 1. 熟练掌握 DFA 及 NFA 的定义及有关概念。 2. 理解并掌握确定的有穷自动机的最小化等算法。 三:实验原理 1.化简 DFA 关键在于把它的状态集分成一些两两互不相交的子集,使得任何两 个不相交的子集间的状态都是可区分的, 而同一个子集中的任何两个状态都是等 价的,这样可以以一个状态作为代表而删去其他等价的状态, 然后将无关状态删 去,也就获得了状态数最小的 DFA 。 2.DFA 的化简算法: (1)首先将 DFA M 的状态划分出终止状态集 K1 和非终止状态集 K2 。 K=K1 ∪K2 由上述定义知, K1 和 K2 是不等价的。 (2 )对各状态集每次按下面的方法进一步划分,直到不再产生新的划分。 设第 i 次划分已将状态集划分为 k 组,即: K=K1(i) ∪K2(i) ∪…∪Kk(i) 对于状态集 Kj (i) (j=1,2, …,k )中的各个状态逐个检查,设有两个状态 Kj ’、 Kj ’’ ∈Kj (i) ,且对于输入符号 a ,有: F (K ,a )=K j m 实用标准文案 F (K ,a )=K j n 如果 Km 和 Kn 属于同一个状态集合,则将 Kj ’和 Kj ’’放到同一集合中,否则将 Kj ’和 Kj ’’分为两个集合。 (3 )重复第( 2 )步,直到每一个集合不能再划分为止,此时每个状态集合 中的状态均是等价的。 (4 )合并等价状态, 即在等价状态集中取任意一个状态作为代表, 删去其他 一切等价状态。 (5 )若有无关状态,则将其删去。 根据以上方法就将确定有限自动机进行了简化, 而且简化后的自动机是原自动机 的状态最少的自动机。 四:数据结构与算法 struct edge{ string first;// 边的初始结点 string condition;// 边上的条件 精彩文档 实用标准文案 string last;// 边的终点 }; string move(string collection,char ch,edge *b)// 状态集合 I 的 a 弧转换 int divide(edge *b,string change)// 分割子集法进行 DFA 的最小化 五:出错分析 1:在数据结构的定义之中,字符与字符串的差别,本次实验室字符 串而不是字符 精彩文档 实用标准文案 六:实验结果与分析 精彩文档 实用标准文案 七:源代码 #includeiostream #includestring using namespace std; #define max 100 struct edge{ string first;// 边的初始结点 string condition;// 边上的条件 string last;// 边的终点 }; int N;//NFA 的边数 string part[max];// 分割子集 string move(string collection,char ch,edge *b)// 状态集合 I 的 a 弧转换 { int i,

文档评论(0)

1亿VIP精品文档

相关文档