- 1、本文档共123页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理课件第2章.ppt
图2.5和图2.8所示的FA均识别以正规式(a|b)*abb所表示的正规集,两个FA是等价的。由于DFA上识别记号的确定性和简单性,往往希望用DFA而不是NFA来识别记号。很幸运,对于任何一个NFA,均可以找到一个与它等价的DFA。这一结果意味着,对任何正规集,均可以构造一个DFA去识别它。 2.4 从正规式到词法分析器 DFA和模拟DFA的算法2.1,实际上已经构成了词法分析器的基础,从而得到构造词法分析器的一般方法与步骤: ① 用正规式对模式进行描述; ② 为每个正规式构造一个NFA,它识别正规式所表示的正规集; ③ 将构造出的NFA转换成等价的DFA,这一过程也被称为确定化; ④ 优化DFA,使其状态数最少,这一过程也被称为最小化; ⑤ 从优化后的DFA构造词法分析器。 2.4.1 从正规式到NFA 对任何的正规式,可以用下述的Thompson算法构造一个NFA,它识别正规式所表示的正规集。 算法2.2 Thompson 算法 输入 字母表∑上的正规式r。 输出 接受L(r)的NFA N。 方法 首先,将r分解成最基本的正规式。由于分解是构造的逆过程,因此分解从正规式的最右端开始。然后按如下规则进行构造。每次构造的新状态都需重新命名,以使得所有状态的名字均不同。 ① 对ε,构造NFA如图2.10(a)所示。其中,s0为初态,f为终态,该NFA接受ε; ② 对∑上的每一个字符a,构造NFA如图2.10(b)所示。其中,s0为初态,f为终态,该NFA接受; ③ 若N(p)和N(q)是正规式p和q的NFA,则: (a) 对正规式p|q,构造NFA如图2.10(c)所示。其中,s0为初态,f为终态,该NFA接受L(p)∪L(q); (b) 对正规式pq,构造NFA如图2.10(d)所示。其中,s0为初态,f为终态,该NFA接受L(p)L(q); (c) 对正规式p*,构造NFA如图2.10(e)所示。其中,s0为初态,f为终态,该NFA接受L(p*)。 ④ 对于正规式(p),使用p本身的NFA,不再构造新的NFA 图2.10 Thompson算法中NFA的构造 例2.11 用Thompson算法构造正规式r=(a|b)*abb的N(r)。 首先把正规式分解为如图2.11(a)所示的树结构,然后自下而上构造整个正规式的NFA,如图2.11(b)所示。具体步骤为:运用算法2.2方法中的②分别为正规式r1=a、r2=b、r6=a、r8=b、r10=b构造NFA N(r1)、N(r2)、 N(r6)、N(r8)、N(r10),运用③(a)为正规式r3=r1|r2构造N(r3),运用④得到N(r4)=N(r3),运用③(c)为正规式r5=r4*构造N(r5),运用③(b)分别为正规式r7=r5r6、r9=r7r8、r11=r9r10构造N(r7)、N(r9)、N(r11)。N(r11)是最终的NFA,其中0为初态,10为终态。 图2.11 构造正规式(a|b)*abb的NFA (a) 分解正规式;(b) 构造NFA 2.4.2 从NFA到DFA 1.NFA识别记号的“并行”方法 用NFA识别记号的过程,是在NFA上顺序地、一条路径一条路径试探的过程。由于需要进行回溯,所以算法构造复杂且工作效率低下。事实上,用NFA识别记号,并不采用这种“串行”的方法,而是采用一种“并行”的方法,从而可以消除识别时的不确定性,以避免回溯。 例2.12 从甲地到乙地,可以乘小汽车也可以骑自行车,具体路线如图2.12所示,其中c表示乘车,b表示骑自行车。现在要求从甲地到乙地,只许乘车而不许骑自行车,该如何走? 此问题抽象在图2.12上,就是如何找到一条从甲地到乙地的路径,上边的标记均由c组成。首先,按照常规一条路径一条路径地试探: 甲 c 2 无路可走,退回 甲 c 1 c 3 无路可走,退回 甲 c 1 c 乙 到达乙地,成功 图2.12 甲地到乙地的所有路径 为了避免回溯,设想有足够多的小汽车同时走若干条路。假设从甲地出发,第一站可以到达乘车所能到达地点的全体,再从第一站出发,第二站可以到达乘车所能到达地点的全体,依此类推,直到某一站中包含了乙地。按照这样的方法,从甲地到乙地的过程与路径如下所示: 甲 c {1,
文档评论(0)