Thompson构造法

✍ dations ◷ 2025-11-09 09:50:55 #自动机,形式语言,算法

Thompson构造法在计算机科学中是指一个能将正则表达式转化为一个与之等价的非确定有限状态自动机(NFA)的算法。算法得到的NFA可以在编程中用于匹配一个正则表达式,这也是正则表达式引擎实现的基本思路之一。

正则表达式和非确定有限状态自动机是形式语言的两种不同的抽象表达方式。在诸如文本编辑器的高级“查找和替换”以及许多编程语言中,人们都习惯使用正则表达式来表示字符串的匹配模式。然而,当计算机执行匹配程序时,NFA却是更加适合的一种格式。因此,Thompson构造法有着重要的应用价值,它实际上可以视作正则表达式到NFA的一个编译器。而从理论角度上来说,该算法实际上是正则表达式和NFA等价性证明的一部分——事实上,这两种表述形式本质上都对应着相同的语言,即正则语言。

在应用中,算法得到的NFA可以再次通过幂集构造和最小化的过程得到一个对应的最简的确定有限状态自动机(DFA),进而用于匹配正则表达式。但是有些情况下也会直接使用对应的NFA。

算法通过递归地将一个正则表达式划分成构成它的子表达式,在得到每个子表达式对应的NFA之后,根据子表达式之间的运算关系和一系列规则构造表达式自身对应的NFA。具体来说,这套构造规则如下所示 :

对于正则表达式为ε或者只由一个符号构成的情况,则无需继续递归,对应的NFA可以直接由下列规则给出:

空表达式ε直接转化为:

直接转化为:

|可以转化为:

可以直接到达()或()的初态。而()或()原来的终态也可以通过ε转移直接到达整个NFA的新终态。

连接表达式可以转化为:

()的初态成为新的NFA的初态。 原来()的终态成为()的初态。而原来()的终态成为新的NFA的终态。

Kleene*闭包*可以转化为:

()连接起来的ε转移使得可以选择经过或者不经过子表达式。而从()的终态到初态的ε转移使得可以重复任意多次。

相关

  • 利宾纳利宾纳(Ribena) 是一种源自英国的饮品,由布里斯托大学科学家Vernon Charley于1933年首次调制,当时是为了研发一种用水果制造的糖浆,选用了在英国容易大量种植的黑加仑子作为原料
  • 双尾目双尾目(学名:Diplura)为一类较为原始的节肢动物,通称铗尾虫、双尾虫。身体细长而扁平,白色或黄色,没有眼睛,尾部具有一对尾须或尾铗,触角长,如念珠状。生活在阴暗潮湿的地方,以腐殖质
  • 总部联合国总部大楼(亦称联合国大厦)是联合国总部的所在地,位于美国纽约市曼哈顿区东侧,属于国际领土,因此只要是会员国国民持有护照就可以进入,包括与美国无邦交的联合国会员国。从联
  • 南北朝时代南北朝是指1331年至1392年间日本历史上皇室分裂为南、北两个天皇的时代,位于镰仓时代与室町时代之间。在这段时间里,两方有各自的皇位承传,也各自有朝廷并立对峙。后嵯峨天皇由
  • 布莱洛克-托马斯-陶西格分流术布莱洛克-托马斯-陶西格分流术(英语:Blalock–Thomas–Taussig shunt),过去称布莱洛克-陶西格分流术(Blalock–Taussig shunt),简称布-陶分流或BT分流,是用来治疗青紫型先天性心脏病
  • 东亚传统度量衡东亚传统度量衡,通称度量衡,指源于中国,广泛应用于东亚各国的传统计量体系。日本多称为尺贯法,也称尺间法,其中“尺”为东亚通用的长度单位,“贯”在日本为质量单位,“间”为日本长
  • 世界童军运动组织世界童军运动组织(英语:World Organization of the Scout Movement, WOSM,/wʊzm/)为全球最大的国际童军活动组织,总共有168个会员。这些会员为经认证的国家童军组织,共辖有4,000
  • 1010 (消歧义)1010通常有以下含义:
  • 皇甫录皇甫录(1470年-1540年),字世庸,号近峯,直隶长洲(今江苏苏州)人,明朝政治人物。应天府乡试第一百二十三名举人。弘治九年(1496年)登进士第二甲第十九名。官至顺庆府知府。著有《皇明纪略
  • JR京滨东北线出轨事故 除特别注明外,本文所有时间均以东九区时间(UTC+9)为准。JR京滨东北线出轨事故(日语:京浜東北線脫線事故)是京滨东北线一列10节车厢的列车,和同一轨道上的工程车相撞,列车前两节车