Thompson构造法

✍ dations ◷ 2025-10-26 07:41:11 #自动机,形式语言,算法

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

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

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

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

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

空表达式ε直接转化为:

直接转化为:

|可以转化为:

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

连接表达式可以转化为:

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

Kleene*闭包*可以转化为:

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

相关

  • 核黄素结构 / ECOD结构 / ECOD核黄素激酶(英语:riboflavin kinase,EC 2.7.1.26)是一个催化以下化学反应的酶:该酶催化的反应的底物为ATP和核黄素,产物是ADP和黄素单核苷酸(FMN)。但是,在古
  • 显微术《显微图谱》(Micrographia,又译为《显微制图》、《显微术》、《显微镜图集》、《显微图象》、《显微图志》、《微观图集》)是罗伯特·胡克的一部著作。这本书于1665年9月出版,
  • 诺尔维特塞浦路斯·诺尔维特(波兰语:Cyprian Norwid,,1821年9月24日-1883年5月23日)是一位波兰诗人、剧作家、画家和雕塑家。他出生在华沙附近的马佐夫舍村 。他的母亲祖先是波兰国王约翰
  • 三角仑山三角仑山,位于台湾新北市坪林区大林里与石里交界处,近宜兰县礁溪乡边界的一座山峰,峰顶海拔1,029米,于2006年入选新版台湾小百岳。该山为石�溪支流四堵溪、姑婆寮溪与得子口溪分
  • 平埔客平埔客,或客平埔,是原本居住在台湾平原地区的平埔族群与外来的客家移民历经长时间相处后,透过通婚与社群关系等,逐渐被客家族群同化并融合,成为台湾客家社会的一部分。通常透过姓
  • 植村吉明植村吉明(日语:植村 吉明/うえむら よしあき  ?,1912年1月28日-1973年5月20日),日本兵库县人,为原子物理学家。他在日治台湾接受中学教育,并在战后成为京都大学理学部物理学博士。
  • 包氏乳玉螺包氏乳玉螺(学名:),亦作包氏玉螺,是玉螺科乳玉螺属的一种。主要分布于韩国、台湾,常栖息在浅海沙底。
  • 刘达 (弘治进士)刘达(?年-?年),山东滨州(今山东省滨州市)人,武骧左卫籍,明朝政治人物,弘治己未进士。弘治十二年(1499年)己未科进士。初官刑部主事。正德二年(1507年)陞通政司右参议。历右通政、左通政。正
  • Arch LinuxArch Linux(或 Arch /ˈɑːrtʃ/))是一款基于 x86-64 架构的 Linux发行版 。系统主要由自由和开源软件组成,支持社区参与。系统设计以 KISS原则(保持简单和愚蠢)为总体指导原则,
  • 喻虹渊喻虹渊(1987年10月22日-)是台湾女演员,桃园市人,毕业于国立阳明高中,辅仁大学哲学系。高中时期曾拍过多部MV与广告,于2008年,演出电视剧《痞子英雄》何小玫一角,在网络上受到热烈讨论