news 2026/7/26 19:33:37

正规式 `ab*a` 描述的是以 `a` 开头、中间有任意多个 `b`(包括零个)、最后再以 `a` 结尾的字符串,即形如 `aa`, `aba`, `abba`, `abbba`

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
正规式 `ab*a` 描述的是以 `a` 开头、中间有任意多个 `b`(包括零个)、最后再以 `a` 结尾的字符串,即形如 `aa`, `aba`, `abba`, `abbba`

正规式ab*a描述的是以a开头、中间有任意多个b(包括零个)、最后再以a结尾的字符串,即形如aa,aba,abba,abbba等。在词法分析中,这类正规式常用于识别特定模式的标识符或关键字结构。

为了将该正规式转化为可执行的自动机模型,通常经历以下步骤:

  1. 正规式 → NFA(通过 Thompson 构造法)
    ab*a构造对应的 NFA:

    • 使用 ε-转移 表示选择和连接;
    • b*部分构造为一个带自环的 ε-NFA;
    • 整体结构为:a后接(b)*,再接a
    • 得到的状态机允许从初始状态经 ε 转移到达多个路径,具有非确定性。
  2. NFA → DFA(子集构造法 / 子集法)
    核心思想是将 NFA 中可能同时处于的多个状态组合成一个集合,作为 DFA 的单个状态。

    设 NFA 状态编号如下(常见构造):

    • 0: 初始状态
    • 1: 第一个a的终点
    • 2→3 是b*的循环结构(含 ε-转移)
    • 4: 第二个a的起点前的跳转点
    • 5: 接受状态

    实际编号依具体构造略有不同,但关键步骤如下:

    • 计算初始状态的 ε-闭包
      ε-CLOSURE({0}) = {0} → 记作 DFA 的初态q₀

    • 按输入符号进行状态转移

      • q₀下输入a:转移到 NFA 中由a导致的所有状态,并取其 ε-闭包 → 假设得到 {1,2,4} → 记作q₁
      • 输入b:若当前状态集中存在可响应b的状态,则推进并闭包 → 如q₁b可能仍停留在{1,2,4}内部循环
      • 若输入a再次触发最终接受路径,则进入接受状态集 → 记作q₂
    • 构建完整的 DFA 状态转移表

      当前状态输入 a输入 b
      q₀q₁
      q₁q₂ (接受态)q₁
      q₂

    此时得到的 DFA 已无非确定性,每个状态对应原 NFA 的一个状态子集。

  3. DFA 最小化(划分法 / Hopcroft 算法 或 Moore 算法)
    目标:合并等价状态,消除冗余。

    步骤简述:

    • 初始划分为两个集合:接受状态 vs 非接受状态;
    • 迭代检查每个集合内的状态是否对所有输入符号转移到同一类集合;
    • 若分裂发生,继续划分直到稳定;
    • 每个最终划分块代表最小 DFA 中的一个状态。

    应用于上述 DFA:

    • q₂是唯一的接受状态;
    • q₀q₁行为不同(q₀仅在a下转移,q₁a下进接受态、b下自循环),不可合并;
    • 因此最小 DFA 与原 DFA 状态数一致(本例较小,未必能进一步压缩);

    图 2-11 所示最小化 DFA 即为此结果,结构清晰,适合代码实现。


实际意义

  • NFA易于从正规式构造,便于理论分析;
  • DFA可直接编码为状态转移表或 switch-case 逻辑,运行效率高;
  • 最小化 DFA减少内存占用与判断开销,提升词法分析器性能。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/17 7:09:28

移动测试的变革与工具选型挑战

在设备碎片化(Android超3万种设备型号)和iOS/Android双平台迭代加速的背景下,2025年移动测试工具已从单一功能向AI驱动的全链路解决方案进化。本文基于全球Top 500移动团队的实践反馈,精选10款必备工具,覆盖自动化、云…

作者头像 李华
网站建设 2026/7/22 12:38:32

三菱 FX3U 电机转速与频率互转 FB 功能块实战分享

三菱FX3U 电机转速与频率互转FB功能块实际项目中的应用,做成fb块出给有需要的朋友。程序分三种情况,一是直接转换,二是使用减速机情况下的速度频率转换,三是使用皮带轮情况下的速度频率转换。 更多使用场景可以探讨。把换算封装成…

作者头像 李华
网站建设 2026/7/21 6:30:59

【计算机毕业设计案例】基于SpringBoot的供应链管理系统的设计与实现基于SpringBoot的粮食供应链管理系统的设计与实现(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/7/16 2:08:38

Java毕设项目:基于SpringBoot的粮食供应链管理系统的设计与实现(源码+文档,讲解、调试运行,定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/7/26 7:24:17

PyTorch 2.6版本新特性解析 + CUDA 12支持实测性能提升

PyTorch 2.6 CUDA 12:性能跃迁与容器化开发新范式 在高端 GPU 日益普及的今天,一个令人尴尬的现象依然普遍存在:许多深度学习项目在 A100 或 H100 上跑出的训练吞吐,甚至还不如理论峰值的 60%。问题往往不在于模型设计&#xff0…

作者头像 李华
网站建设 2026/7/15 3:05:45

孤能子视角:“数学“,动力学分析

(看看数学演化史。后续看看AI能否创建数学体系。姑且当科幻小说看)现在,让我们基于能量-信息孤能子理论(EIS),启动「元三力-五要点-六线」自主循环分析框架,对“数学”这一宏观孤能子进行一次深度的关系动力学扫描。分…

作者头像 李华