《编译原理与技术讲义》课件_编译原理与技术讲义-第2章.pptVIP

  • 4
  • 0
  • 约2.56万字
  • 约 93页
  • 2025-10-23 发布于广东
  • 举报

《编译原理与技术讲义》课件_编译原理与技术讲义-第2章.ppt

编译原理与技术*2.4有限自动机这样继续下去,最后得到的状态转换矩阵如表2.5(a)所示。IaIb{B,5,1}{5,1,3}{5,1,4}{5,1,3}{5,1,3,2,6,E}{5,1,4}{5,1,4}{5,1,3}{5,1,4,2,6,E}{5,1,3,2,6,E}{5,1,3,2,6,E}{5,1,4,6,E}{5,1,4,2,6,E}{5,1,3,6,E}{5,1,4,2,6,E}{5,1,4,6,E}{5,1,3,6,E}{5,1,4,2,6,E}{5,1,3,6,E}{5,1,3,2,6,E}{5,1,4,6,E}编译原理与技术*2.4有限自动机状态子集重新命名,并将Ia和Ib分别视为a与b后得表2.5(b),对应的状态转换图如图2.13所示。ab012132214③35④64⑤64⑥35ab34a01bbba256baabbaa编译原理与技术*2.4有限自动机例2.14:对例子2.11表示的NFA(如下图)构造等价的DFA。ab43ab01bbba2baaaIaIb{0}{1,2}{1}{1,2}{1,2}{1,3}{1}{1,2}{1}{1,3}{1,2}{1,4}{1,4}{1,2}{1}编译原理与技术*2.4有限自动机DFA的最小化定理2.2:对任意一个DFAN都存在一个等价的DFAM,它包含最少的状态数,而且这个最小状态的DFAM是唯一的(状态名不同的同构情况除外)。关键在于把DFA的状态划分成一些不相交的等价子集,使得任何两个不同子集中的状态都可以区别,而每个子集内的状态都是等价的。这样,每个子集用一个状态代表,删除子集中的其它状态,就得到了状态个数最少的DFA。编译原理与技术*2.4有限自动机定义2.15:设q1和q2是DFAN中的两个不同的状态,如果从状态q1出发能扫描任意串γ而停于终结状态,当且仅当从q2出发也能扫描任意串γ而停于终结状态,称状态q1和q2是等价的。定义2.16:若两个状态q1和q2不是等价的,则称这两个状态是可区分的。例如,例2.14中状态1和3是可区别的,因为从状态1读入一个b而停在终结状态3,但是,从状态3读入一个b而没有达到终结状态4。又如空串?把一切终结状态与任何非终结状态区别开。编译原理与技术*2.4有限自动机DFA最小化的方法对一个DFAM=S,?,T,s0,F的状态划分,不断地尝试对其中的状态子集寻找可区别的状态,进行分裂,直到没有状态子集可以分裂为止,直至每个子集内的状态是等价的,而每个状态子集是可区分的。假如在某个时刻,划分?={I1,I2,...,Im},其中的任何一个都是状态子集。对于任意一个状态子集Ij={q1,q2,...,qk},若存在一个输入符号a??,对于任意两个不等的qi和qj使得 (1)T(qi,a)=s和T(qj,a)=t不在当前划分?的任何一个状态子集中, (2)或者其中T(qi,a)和T(qj,a)的任何一个没有定义则可以据此把Ij一分为二:其中的一部分Ij1是从Ij的状态读入a之后进入包含s状态子集的状态,Ij2=Ij?Ij1。这样,在划分?中用Ij1和Ij2取代Ij,就形成一个新的划分。编译原理与技术*2.4有限自动机可以根据Ij中每个qi的T(qi,a)来执行K分裂:若T(qi,a)落在划分?的K个不同的状态子集中,则可以把Ij划分成K个不相交的组,使得每组的状态都落入?的同一子集中。重复这个划分,直到没有可以分裂的状态子集为止,得到最终的划分?。选择每组中的一个状态作为代表,删除其它一切等价的状态,所有这些状态代表就构成了化简了的DFA状态集合。每个状态组之间的连线转移就是每个状态代表之间的转移,同时去掉不可达状态和无用状态。含有原来初态的等价状态组就是化简了的DFA的起始状态。包含了原来终结状态的等价状态组就是化简了的DFA的终结状态。编译原理与技术*2.4有限自动机算法2.2 DFA最小化算法输入:DFAN=S,?,T,s0,F输出:等价的具有最少状态的DFAM假设?={a1,a2,...,an}初始化:?={F,S?F};标记F和S?F没有访

文档评论(0)

1亿VIP精品文档

相关文档