news 2026/8/30 22:29:56

正规式(正则表达式)与正规集是形式语言理论中的核心概念,广泛应用于编译原理中的词法分析阶段

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
正规式(正则表达式)与正规集是形式语言理论中的核心概念,广泛应用于编译原理中的词法分析阶段

正规式(正则表达式)与正规集是形式语言理论中的核心概念,广泛应用于编译原理中的词法分析阶段。它们通过三种基本运算——或(|)、连接(・)、闭包(*)——递归地构造出能够描述特定字符串模式的表达式。

1. 核心概念:正规式与正规集

  • 定义逻辑

    • 正规式是一个由字母表 Σ 上的符号经过有限次应用“或”、“连接”、“闭包”运算生成的表达式。
    • 对应的正规集是该正规式所能匹配的所有字符串组成的集合。
  • 运算规则补充说明

    • 连接A·B表示先出现 A 的串,紧接着出现 B 的串;
    • A|B表示可以是 A 的串或 B 的串;
    • 闭包A*表示 A 出现任意多次(包括0次),即 ε(空串)、A、AA、AAA… 都属于该集合。
  • 优先级与省略规则

    • 闭包*优先级最高 → 然后是连接→ 最后是或|
    • ab*|c实际上等价于(a(b*)) | c
示例解析(Σ = {a, b}):
正规式正规集含义
ab只含字符串 “ab” 的集合:{“ab”}
`ab`
a*所有由 a 组成的任意长度字符串(含空串):{ε, a, aa, aaa, …}
(ab)*由若干个 “ab” 拼接而成的串:{ε, ab, abab, ababab, …}
`a(ab)*`
(ab)*abb形如 (ab)重复任意次后接 “abb”,如:abb, ababb, abababb…

2. 正规式的代数性质

这些性质用于正规式的化简和等价变换,在自动机最小化和优化中非常有用:

  • 交换律(仅对|成立)
    $ U|V = V|U $

  • 结合律
    $ (U|V)|W = U|(V|W) $
    $ (UV)W = U(VW) $

  • 分配律
    $ U(V|W) = UV|UW $
    $ (U|V)W = UW|VW $

  • 闭包恒等式
    $ \varepsilon* = \varepsilon $ (空串的闭包仍是空串)
    $ V** = V* $ (闭包的闭包等于自身)

  • 其他常见恒等式

    • $ \varnothing* = \varepsilon $
    • $ U|\varnothing = U $
    • $ U\varnothing = \varnothing $

3. 有限自动机(FA)

有限自动机是用来识别正规集的数学模型,分为两类:

(1)确定有限自动机(DFA)
  • 定义为五元组:(S, Σ, f, s₀, Z)

    • S:有限状态集合
    • Σ:输入字母表
    • f:S × Σ → S,确定性转移函数(每种输入唯一决定下一个状态)
    • s₀ ∈ S:唯一初始状态
    • Z ⊆ S:终止状态集合
  • 特点:

    • 无歧义:对于每个状态和输入字符,只有一个下一状态;
    • 易于实现为程序。
(2)非确定有限自动机(NFA)
  • 转移函数为:f: S × (Σ ∪ {ε}) → 2^S(可映射到状态子集)

  • 允许:

    • 多个转移路径(相同输入从同一状态出发到不同状态)
    • ε-转移(不读入字符也能改变状态)
  • 优势:

    • 更容易从正规式构造(如 Thompson 构造法)
  • 但最终可通过子集构造法转换为等价 DFA。

🔄关键定理:一个语言是某个正规式所表示的语言 ⇔ 它能被某个 FA 识别 ⇒ 即:正规式 ≡ NFA ≡ DFA 在语言能力上等价


补充背景:在词法分析中的作用

在编译器设计中:

  • 使用正规式来精确描述词法单元(token),例如:
    • 标识符:letter(letter|digit)*
    • 整数常量:digit+
  • 将这些正规式转化为NFA → DFA → 最小化DFA,进而生成高效的词法分析器(如 Lex 工具的工作流程)。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/29 4:13:50

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

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

作者头像 李华
网站建设 2026/8/29 4:13:21

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

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

作者头像 李华
网站建设 2026/8/29 5:06:56

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

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

作者头像 李华
网站建设 2026/8/29 5:07:04

HuggingFace Model Hub搜索技巧:精准定位中文大模型

HuggingFace Model Hub搜索技巧:精准定位中文大模型 在中文自然语言处理项目中,你是否曾为找不到合适的预训练模型而苦恼?面对 HuggingFace 上数十万个模型,如何快速锁定一个真正适用于中文场景、性能稳定且社区活跃的大模型&…

作者头像 李华
网站建设 2026/8/29 5:06:54

HuggingFace Trainer自定义训练循环(GPU加速)

HuggingFace Trainer自定义训练循环(GPU加速) 在深度学习模型的开发过程中,一个常见的痛点是:明明算法设计得当,实验却因为环境配置失败、训练速度太慢或代码冗长难调而迟迟无法推进。尤其是在使用像 BERT 这样的大模型…

作者头像 李华
网站建设 2026/8/29 5:07:16

5.2 需求分析实战!从模糊想法到清晰spec.md:3步完成需求规范编写

5.2 需求与设计:在框架中演练,从模糊想法到清晰的spec.md(需求分析实战) 引言 在AI原生开发中,需求分析是第一步,也是最关键的一步。一个清晰、完整的需求规范(spec.md)是AI生成高质量代码的基础。 本文将深入解析如何从模糊的想法转化为清晰的需求规范,通过实战案…

作者头像 李华