当前位置: 首页 > news >正文

正规式 `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减少内存占用与判断开销,提升词法分析器性能。
http://www.jsqmd.com/news/156135/

相关文章:

  • 探秘三相三电平PWM整流器闭环控制策略:三电平SVPWM算法的魅力
  • 卷积神经网络输入归一化处理PyTorch代码示例
  • 有限自动机与正规式之间的相互转换是形式语言与自动机理论中的核心内容,广泛应用于编译器设计中的词法分析阶段
  • SLS 3D 打印机革新制造:Raise3D 以技术突破,解锁柔性生产新可能
  • 探索三相逆变器双闭环控制MATLAB/Simulink模型
  • 生成式AI辅助测试环境配置
  • Dify变量作用域管理PyTorch模型输入输出参数
  • Docker logs查看PyTorch容器运行输出日志
  • 【课程设计/毕业设计】基于Vue与SpringBoot的私房菜定制系统设计【附源码、数据库、万字文档】
  • 古文观芷-拍照搜古文功能:比竞品快10000倍
  • Java毕设选题推荐:基于springboot+vue的私房菜定制上门服务系统的设计与实基于SpringBoot的私房菜上门定制系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 西门子S7 - 1200博图程序案例:PID恒温恒压供冷却水系统搭建
  • 转速、电流双闭环直流调速系统控制器设计之旅
  • 基于S7 - 300 PLC和Wincc Flexible触摸屏的温室大棚控制
  • AI应用架构师转行元宇宙创业:如何快速建立行业人脉?
  • YOLOv10官方镜像上线!适配最新CUDA 12.4驱动
  • Dify知识库导入PDF提取文本喂给PyTorch模型
  • 如何通过SSH连接远程PyTorch容器进行模型调试?
  • 基于PSO算法的光伏MPPT的Simulink仿真实现
  • 三菱 FX3U 电机转速与频率互转 FB 功能块实战分享
  • Java毕设选题推荐:基于SpringBoot的高校学习讲座预约系统的设计与实现讲座信息(主题、讲师、时间地点、容纳人数【附源码、mysql、文档、调试+代码讲解+全bao等】
  • yolo7障碍物识别 -2025.12.25
  • WSL2下安装PyTorch-GPU失败?试试我们的预装镜像方案
  • YOLO检测框后处理优化:NMS算法GPU并行加速
  • 深入探索牵引力控制系统(TCS):从标定到算法实现
  • 4.5 专家能力!Agent Skills从入门到精通:为AI植入专家能力的实战教程
  • 探秘西门子 S7 - 1200 博图 3 轴伺服螺丝机程序
  • Jupyter Notebook魔法命令%%timeit测试PyTorch性能
  • HuggingFace Inference API调用限制与替代方案
  • 2025.10.22实验三_AI语音生成平台