词法分析
1411 字
7 分钟
词法分析
Warning
含AI生成内容
第三章 词法分析 · 知识点详解
🔴 核心(必背/必算) 🟡 理解(会说清) 🟢 了解(有印象) 本章性质:计算大题(约 20 分),“正规式→NFA→DFA→最小化”一条龙必练。
一、词法分析程序(扫描器)基础(🟡 理解)
- 扫描器通常设计为子程序:语法分析需要单词时调用它,识别出一个单词后返回一个二元组。
- 单词五大类:
- 基本字(关键字、保留字):如 if、then,有分隔语法的作用。
- 标识符:各种名字。
- 常量:整型、实型、布尔型、字符型。
- 运算符:算术、逻辑、关系运算符。
- 界符:
, ; ( )等。
- 输出二元组:
(单词种别, 单词自身值或指针)。- 例
if k=7 then:(3,'if')、(1, k的符号表指针)、(4,'=')、(2,'7')、(3,'then')…
- 例
二、单词的描述工具(🟡 理解)
正规文法(3 型 / 右线性)
形如 A→aB 或 A→a(A、B∈V_N,a∈V_T)。绝大部分程序设计语言的单词都能用正规文法描述。
正规式和正规集(递归定义)
ε和∅是 Σ 上的正规式,表示正规集{ε}和∅。- 任意
a∈Σ,a 是正规式,表示正规集{a}。 - 若 e₁、e₂ 是正规式,正规集为 L(e₁)、L(e₂),则:
(e₁)→ L(e₁)e₁|e₂→ L(e₁) ∪ L(e₂) (或/并)e₁·e₂→ L(e₁)·L(e₂) (连接)e₁*→ (L(e₁))* (闭包)
- 仅有限次使用上述规则得到的才是正规式。
正规式代数规则(🟡)
- 交换律:
r|s = s|r(并可交换) - 结合律:
r|(s|t)=(r|s)|t、r(st)=(rs)t - 分配律:
r(s|t)=rs|rt、(s|t)r=sr|tr(成立) - 幂等:
r|r=r;与 ε:rε=εr=r - ⚠️
rs ≠ sr:连接不满足交换律。
🔴 正规式 ↔ 正规文法 互相转换
① 正规式 → 正规文法:令 S→r,反复分解直到每条产生式最多含一个终结符:
A→xy⟹A→xB, B→yA→x*y⟹A→xA, A→yA→x|y⟹A→x, A→y
例:
R=a(a|d)*→S→aB, B→aB|dB|ε
② 正规文法 → 正规式:反向合并直到只剩开始符定义、右部无非终结符:
A→xB, B→y⟹A=xyA→xA, A→y⟹A=x*yA→x, A→y⟹A=x|y
例:
S→dA|eB, A→aA|b, B→bB|c→R=(da*b)|(eb*c)
三、有穷自动机(🟡 理解 + 🔴 计算)
有穷自动机(FA)能准确识别正规集,分 DFA 和 NFA 两种。
DFA(确定的有穷自动机)
M = (K, Σ, f, S, Z)
- K:有穷状态集
- Σ:输入字母表
- f:转换函数,
K×Σ→K(单值映射,一个状态一个输入只到一个状态) - S:唯一初态
- Z⊆K:终态集
- 特征:单值、单初态、无 ε 弧。
接受:若 f(S,α)∈Z,则串 α 被 DFA 接受。
重要结论:V⊆Σ* 是正规集 ⟺ 存在 DFA M 使 V=L(M)。
NFA(不确定的有穷自动机)
M = (K, Σ, f, S, Z)
- f:
K×Σ→2^K(映射到状态集的幂集,一个输入可到多个状态) - S:初态集(可多初态)
- 特征:可多值、可多初态、可有 ε 弧。
重要结论:
- 每个 NFA M 都存在等价 DFA M₁,使 L(M)=L(M₁)。
- DFA 是 NFA 的特例。
- NFA、正规式、正规文法三者等价、可互相转换。
四、🔴 核心算法一条龙(词法大题)
算法 1:语言描述 → 正规式
根据自然语言约束写正规式。
- 例:“由 a、b 组成、倒数第二个字符为 a” →
(a|b)*a(a|b) - 例:“以 a 开头、后跟任意个 a 或 d” →
a(a|d)*
算法 2:正规式 → NFA(Thompson 构造法)
逐结构地拼接小 NFA:
R=ε:X —ε→ YR=a:X —a→ YR=st(连接):N(s) 的终态 —ε→ N(t) 的初态。R=s|t(并):新增初/终态,用 ε 弧分别连到 N(s)、N(t)。R=s*(闭包):新增初/终态,加 ε 弧;N(s) 终态→初态加 ε 弧,新初态→新终态加 ε 弧。
算法 3:NFA → DFA 确定化(子集构造 / 造表法)
关键运算:
- ε-closure(I):I 中状态经任意条 ε 弧能到达的状态集(一定包含状态自身)。
- move(I,a):I 中状态经一条 a 弧到达的状态全体。
- I_a = ε-closure(move(I,a))。
步骤:
- 表第 0 行/列作标识。
- 第 1 行第 1 列填
ε-closure(S)。 - 对已确定的状态集 I,逐个输入符 aⱼ 计算
I_{aⱼ};若是新集合,补到表尾空行第一列。 - 重复第 3 步,直到不再产生新状态。
- 重命名各新状态。含原 NFA 终态的新状态即为 DFA 终态。
算法 4:DFA 最小化(分割法)
目标:无多余状态、无相互等价状态。
- 多余状态:从初态出发任何输入串都不可达的状态。
- 等价条件:
- 一致性:s、t 同为可接受态或同为不可接受态。
- 蔓延性:对所有输入符号,s、t 都转到等价的状态。
步骤:
- 第一步必须先分两组:终态组 / 非终态组。
- 对每组,按各状态经同一输入到达的状态所属组是否相同,逐步细分;不同则拆开。
- 直到不能再分为止。
- 每组合并为一个状态(消除等价态),去掉多余状态。
⚠️ 易错点汇总
- ε-closure 一定包含状态自身。
- 最小化第一步是”终态/非终态”两分,不能一上来全拆。
- NFA→DFA 叫确定化(造表/子集法);DFA 化简叫最小化(分割法),两者别混。
- 连接
rs≠sr;但并r|s=s|r。 - DFA 单初态无 ε;NFA 可多初态、有 ε 弧。
📝 常考题型
- 20 分大题:给语言 → 写正规式 → 构造 NFA → 确定化为 DFA → 最小化 DFA(一条龙)。
- 证明题:用集合思想证正规式恒等式(如
s(r|t)=sr|st)。
🟢 了解
- LEX:词法分析程序自动构造工具。编写含正规式定义和动作的 LEX 源程序 → LEX 编译 → 生成 C 语言词法分析器 → 接收输入串输出单词符号串。
- 为 NFA 构造正规式:引入新结点 x、y,x—ε→所有初态、所有终态—ε→y,再用状态消解法消去中间结点,x、y 间弧上标记即所求正规式。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
相关文章智能推荐
1
自顶向下语法分析
编译原理编译原理知识点(考试向)
2
自底向上——LR 分析
编译原理编译原理知识点(考试向)
3
自底向上——算符优先分析
编译原理编译原理知识点(考试向)
4
复习提纲
编译原理编译原理复习提纲(考试向)
5
编译原理知识点
编译原理编译原理知识点(考试向)
随机文章随机推荐










