【编译原理笔记】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"箭头标识

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

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

相关推荐
Li_RuiQi4 小时前
DAgger与交互式模仿学习_ACT学习笔记
笔记·学习
He BianGu5 小时前
【笔记】C# 中BindingFlags的详细作用
笔记·c#
AI视觉网奇5 小时前
turtle 入门教程笔记
笔记
跨知易知识产权5 小时前
美国专利确权是什么,和专利诉讼有什么不一样?
笔记
杨逢昌工厂6S管理5 小时前
126-杨逢昌6S三环体系:越做越乱的现场熵增机理与基准化治理——一线现场诊断笔记
经验分享·笔记·职场和发展·学习方法
悟道书生5 小时前
若依 RBAC 权限控制学习笔记
java·网络·笔记·sql·学习·vue
陈哈哈11116 小时前
折腾了半天,总算把 Vim 9.2 装明白了
笔记
陈哈哈11116 小时前
折腾了半天,总算把 OpenGL 的开发环境给装明白了
笔记
深圳老胡7 小时前
STM32F103 硬件 SPI 与软件 IO 模拟 SPI 最高速度差异详解
笔记·stm32·单片机·代码规范·1024程序员节
正弦波_Wave7 小时前
【Orcad原理图打印Pdf】
笔记·pdf