news 2026/4/3 6:20:27

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

作者头像

张小明

前端开发工程师

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/3/17 16:58:11

深度学习入门必备:PyTorch安装与CUDA配置详细步骤

深度学习环境搭建新范式:从 PyTorch 到容器化 GPU 加速实战 在如今的 AI 开发现场,一个常见的场景是:刚入门的学生或工程师兴致勃勃地打开教程,准备运行第一个 torch.cuda.is_available(),结果却被一连串的 ImportErro…

作者头像 李华
网站建设 2026/3/14 5:14:32

SSH公钥认证配置失败排查指南

SSH公钥认证配置失败排查指南 在深度学习和AI工程实践中,远程访问GPU服务器或容器化训练环境已成为日常操作。无论是通过PyTorch-CUDA镜像启动的虚拟机实例,还是Kubernetes中的训练节点,开发者几乎都需要依赖SSH建立安全连接。而为了兼顾安全…

作者头像 李华
网站建设 2026/3/14 18:21:25

计算机Java毕设实战-基于SpringBoot的粮食供应链管理系统的设计与实现基于Java springboot粮食供应链管理系统采购销售【完整源码+LW+部署说明+演示视频,全bao一条龙等】

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

作者头像 李华
网站建设 2026/3/28 10:57:25

Java毕设选题推荐:基于Java springboot粮食供应链管理系统采购销售基于SpringBoot的粮食供应链管理系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】

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

作者头像 李华