从正则表达式到NFA

news/2023/6/9 18:27:23

一、正则表达式到NFA的基本结构

1. 我们先回顾一下 RE 的三个基本操作:

  • 可选(alternative):对于给定的两个正则表达式 M 和 N,选择操作符( | )形成一个新的正则表达式 M|N ,如果一个字符串属于 M 或者 N,则它属于 M|N。
  • 联结(concatenation):对于两个对于给定了两个正则表达式 M 和 N,连接操作符( · )形成一个新的正则表达式 M·N,通常可以省略连接符号,比如 (a|b)·a ,定义了两个字符串:aa、ab。
  • 克林闭包(Kleene closure): 正则表达式 M 的克林闭包,记作 M*,定义为 M 与自身连接 0 次或者多次形成的所有集合取并集。

2. RE 到 NFA

由于 NFA 是 RE 的实现形式,本身是等价,我们先看看三个基本操作对应的 NFA ,这里我们介绍一下 Thompson 构造法:

这个构造法包含三个基本操作以及单个字符对应的 NFA:

  • a 对应的 NFA
    在这里插入图片描述

  • b 对应的 NFA
    在这里插入图片描述

  • ab 对应的 NFA
    在这里插入图片描述

  • a|b 对应的NFA
    在这里插入图片描述

  • a* 对应的 NFA
    在这里插入图片描述

注:带有双环的状态属于接受状态

这个构造发就是从输入的 RE 每一个字符构造简单的 NFA 开始,然后按照优先级规定的顺序,根据基本操作转换的。

这种构造法实现起来比较简单,每个NFA 都有一个 S(0) 和一个 S(A),没有从 S(A) 发出的转移,连接其他 NFA 的时候总是使用 ϵ 转移来链接前一个 NFA 的 S(A)和后一个 NFA 的起始状态。最后,每个状态至多有两个进入或者退出该状态的 ϵ 转移。对于字母表中的每个符号,至多有一个进入该状态和退出该状态的转移。这些性质简化了 NFA 的表示以及操作

3. 举例介绍

我们根据 Thompson 构造法,分步骤构造一下 a(b|c)* 这个正则表达式的转化过程

  1. 对字母表中的 a、b、c 构造对应单个字符对应的 NFA
    在这里插入图片描述

  2. 构造出 b|c 对应 的 NFA
    在这里插入图片描述

  3. 构造出 (b|c)* 对应的 NFA,对 *1 这个 NFA,执行克林闭包的基本操作:
    在这里插入图片描述

  4. 在 2 式前面进行连接 a 的基本操作,完成最终的转化, 2 式代表(b|c) 的 NFA
    在这里插入图片描述

  5. 其实上面的例子可以看到 NFA 存在大量的不必要的状态以及 ϵ 转移,这些都可以通过一些 NFA 转化为 DFA 的构造方法,比如子集构造法,将这些无效的状态转移移除,最终形成的 DFA 如下:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-4567079.html

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

我的驾照之路(r12笔记第29天)

今天学习了一天交规,因为明天就要去考科目一,是的,我还没有考驾照,而且留下来的时间很短,说来真是惭愧,时间总是一拖再拖,一晃几年过去了。记得那边去报名的时候,司机看了下我说&…

OSChina 周二乱弹 —— 我的手机指纹解锁和别人不一样

2019独角兽企业重金招聘Python工程师标准>>> Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 巴拉迪维 :晚安只能跟女朋友和家人说,所以祝大家做个好梦吧!#今日歌曲推荐# 《爱不完》- 刘…

webpack打包php资源,webpack打包初识

1.新建项目目录,目录名称webpack-test2.进入新建的项目目录中(webpack-test)cd webpack-test3.使用命令初始化目录cnpm init4.在3步骤基础上,会输出让你输入初始化目录的相关信息,你可以根据自己的实际情况进行输入,当然你也可以一路回车下去5.使用命令安装webpackcnpm install…

2. 拍照的基础知识

1. 单反相机的全称为单镜头反光相机 单反相机的原理就体现在“单”和“反”上,单字就是单镜头,就是说单反相机只能安装一个镜头,光线或是影像通过单反镜头进行来取景的。 对于“反”来说就是相机系统内部有一个反光板。光线通过单反镜头投射…

K项目轶事之开工第一天

K项目轶事之开工第一天 今天是K项目报到第一天,也是2020年春节后第一天上班!因肺炎疫情的影响,笔者休息了近2个月,今天总算是能顺利复工了,真是不容易。 应项目客户K公司的要求,我做这个SAP项目是要入职K公…

每日 CRUD?两年滴滴和入职头条的后端开发经验分享!共勉!

点击上方“Java精选”,选择“设为星标”别问别人为什么,多问自己凭什么!下方留言必回,有问必答!每天 08:00 更新文章,每天进步一点点...先简单交代一下背景吧,某不知名985的本硕,17年…

2021年中国健康体检现状与格局分析,老龄化趋势推动产业发展,民营占比持续提升「图」

一、健康体检产业链概述 健康体检产业上游主要包括相关仪器设备和医用耗材,下游为个人客户或单位团体客户。医疗器械的市场分散程度较高,如果体检中心对医疗器械的采购量大,对上游的议价能力就强;体检中心对下游的团体客户议价能…

总结了11句话,送给通信新员工

1、入职第一件事——改变形象。刚毕业的大学生进入工作单位之后,需要尽快完成身份的转换——从一名学生,变身为一个职业人。这个转换的第一步,就是改变形象外表。大学里过于随意的穿搭,请一定不要带进单位,尤其是入职的…