【编译原理笔记】3.3 Specification of Tokens

1 正则表达式 Regular Expression

正则表达式是描述词素模式的强大数学工具,用于定义正则语言

1.1 三个基本组成部分

  1. 基础规则

    • ε 是正则表达式,表示只包含空串的语言 {ε}

    • 如果a是字母表Σ中的符号,则a是正则表达式,表示语言 {a}

  2. 归纳规则(假设r和s是正则表达式):

    • (r)|(s) 表示语言 L(r) ∪ L(s)(并集)

    • (r)(s) 表示语言 L(r)L(s)(连接)

    • (r)* 表示语言 (L(r))*(Kleene闭包)

  3. 优先级规则

    • 闭包(*) > 连接 > 并集(|)

    • 左结合性

1.2 代数定律

定律 描述 公式
交换律 运算可交换 r|s = s|r
结合律 运算可结合 (r|s)|t = r|(s|t)
分配律 连接对的分配 r(s|t) = rs|rt
单位元 ε是连接单位元 εr = rε = r
幂等律 闭包幂等 r** = r*

2 正则定义 Regular Definition

2.1 形式化定义

正则定义是一系列定义序列:

复制代码
 d₁ → r₁
 d₂ → r₂
 ...
 dₙ → rₙ

约束条件

  • 每个dᵢ是新的符号,不在基本字母表Σ中

  • 每个rᵢ是Σ ∪ {d₁, d₂, ..., dᵢ₋₁}上的正则表达式

2.2 实际应用示例

标识符的正规定义

复制代码
 letter → A|B|...|Z|a|b|...|z|_
 digit → 0|1|...|9
 id → letter (letter|digit)*

数值常量的正规定义

复制代码
 digit → [0-9]
 digits → digit+
 number → digits (. digits)? (E [+-]? digits)?

2.3 常用简写符号

  1. 正闭包r+ = rr*(一个或多个r)

  2. 可选r? = r|ε(零个或一个r)

  3. 字符类[abc] = a|b|c

  4. 范围表示[a-z] = 所有小写字母

  5. 排除类[^abc] = 除了a,b,c外的所有字符

2.4 扩展示例

复制代码
 # 使用扩展语法的标识符定义
 id → [A-Za-z_] [A-Za-z0-9_]*
 ​
 # 使用扩展语法的数值定义  
 number → [0-9]+ (\. [0-9]+)? (E [+-]? [0-9]+)?

3 转换图 (Transition Diagram)

转换图的基本元素

  • 状态:用圆圈表示,包含状态编号

  • 起始状态:用"start"箭头标识

  • 接受状态:用双圆圈表示

  • :带标签的箭头,表示状态转移

相关推荐
d111111111d33 分钟前
锁相环是什么,为什么可以用来放大时钟频率,怎么做到的,还有预分频起,为什么可以进行分频和倍频?
笔记·stm32·单片机·嵌入式硬件·学习
YJlio39 分钟前
Active Directory 工具学习笔记(10.3):AdExplorer 实战(三)— 配置与偏好、导出与安全
笔记·学习·安全
数据门徒43 分钟前
《人工智能现代方法(第4版)》 第10章 知识表示 学习笔记
人工智能·笔记·学习
狐571 小时前
2025-12-04-LeetCode刷题笔记-2211-统计道路上的碰撞次数
笔记·算法·leetcode
三块可乐两块冰1 小时前
【第二十二周】机器学习笔记二十一
人工智能·笔记·机器学习
IMPYLH2 小时前
Lua 的 type 函数
开发语言·笔记·后端·junit·lua
YANshangqian2 小时前
QOwnNotes(事务笔记管理)
笔记
思成不止于此2 小时前
MySQL 查询基础(一):列选择、算数运算与别名使用
数据库·笔记·sql·学习·oracle
犯困的橘子3 小时前
PCIE Latency Tolerance Reporting (LTR) Mechanism笔记
笔记·pcie ltr
世界宇宙超级无敌究极特级顶级第一非常谱尼3 小时前
RF Power Amplifiers for Wireless Communications 第二章学习笔记
笔记·学习·pa·功率放大器·mmic