形式语言与自动机
形式语言与自动机:正则语言、上下文无关文法、下推自动机与图灵机
1. 形式语言基础
1.1 基本概念
- 字母表 :有限符号集合,如
- 字符串:字母表中符号的有限序列
- 空串 :长度为0的字符串
- 语言 : 的子集,即字符串的集合
1.2 语言运算
- 并:
- 连接:
- 闭包:
- 正闭包:
1.3 Chomsky 文法层次
| 类型 | 文法 | 自动机 | 产生式形式 | | ---- | -------------- | -------------- | ----------------------- | ------ | ---- | ----- | --- | | 0型 | 无限制文法 | 图灵机 | | | 1型 | 上下文有关文法 | 线性有界自动机 | | | 2型 | 上下文无关文法 | 下推自动机 | | | 3型 | 正则文法 | 有限自动机 | 或 |
2. 有限自动机
2.1 确定性有限自动机(DFA)
DFA 是五元组 :
- :有限状态集
- :输入字母表
- :转移函数
- :初始状态
- :接受状态集
示例:识别以 “01” 结尾的字符串的 DFA:
q0 --0--> q1
q0 --1--> q0
q1 --0--> q1
q1 --1--> q2 (接受)
q2 --0--> q1
q2 --1--> q0
2.2 非确定性有限自动机(NFA)
NFA 允许:
- 同一状态同一输入有多个转移
- 转移(不消耗输入)
2.3 DFA 与 NFA 等价
子集构造法:将 NFA 转换为 DFA。
最坏情况下, 状态 NFA 可能产生 状态 DFA。
2.4 DFA 最小化
Hopcroft 算法:
- 初始划分:接受状态 / 非接受状态
- 对每个划分块,检查是否可进一步分割
- 重复直到不可分割
时间复杂度:
3. 正则语言
3.1 正则表达式
| 操作 | 语法 | 含义 | | ---- | --------- | --------------------- | -------------------- | | 并 | | | | 连接 | | | | 闭包 | | |
正则表达式 → NFA:Thompson 构造法。
DFA → 正则表达式:状态消除法。
3.2 正则语言的性质
封闭性:正则语言对并、连接、闭包、补、交、差运算封闭。
泵引理(Pumping Lemma):
若 是正则语言,则存在泵长度 ,使得 中任何长度 的字符串 可分解为 ,满足:
用途:证明某语言不是正则语言。
示例: 不是正则语言。
3.3 Myhill-Nerode 定理
是正则语言 的等价类数有限。
等价关系:
4. 上下文无关文法(CFG)
4.1 CFG 定义
四元组 :
- :非终结符集合
- :终结符集合
- :产生式规则
- :起始符号
示例:匹配括号的语言 :
4.2 推导与语法树
最左推导:每次替换最左边的非终结符。
最右推导:每次替换最右边的非终结符。
歧义性:如果一个字符串有多棵不同的语法树,则文法是歧义的。
示例:算术表达式文法:
字符串 id + id × id 有两棵语法树(歧义)。
消除歧义:引入优先级和结合性。
4.3 Chomsky 范式(CNF)
每个产生式形如 或 。
任何 CFG 都可转换为 CNF。
4.4 CYK 算法
判断字符串 是否属于 CNF 文法的语言:
时间复杂度:
5. 下推自动机(PDA)
5.1 PDA 定义
七元组 :
- :栈字母表
- :初始栈符号
5.2 PDA 与 CFG 等价
CFG → PDA:对每个非终结符,猜测产生式并匹配终结符。
PDA → CFG:将 PDA 的状态对编码为 CFG 的非终结符。
5.3 确定性 PDA(DPDA)
DPDA 对每个输入和栈顶最多有一个转移。
DPDA 识别的语言是 CFL 的真子集,称为确定性上下文无关语言(DCFL)。
6. 上下文无关语言的性质
6.1 CFL 泵引理
若 是 CFL,则存在泵长度 ,使得 中任何长度 的字符串 可分解为 ,满足:
示例: 不是 CFL。
6.2 CFL 的封闭性
| 运算 | 封闭性 |
|---|---|
| 并 | 封闭 |
| 连接 | 封闭 |
| 闭包 | 封闭 |
| 交 | 不封闭 |
| 补 | 不封闭 |
| 与正则语言交 | 封闭 |
7. 图灵机
7.1 图灵机定义
七元组 :
- :带字母表,包含空白符
7.2 图灵机的变体
| 变体 | 与标准TM等价 |
|---|---|
| 多带TM | 是 |
| 非确定性TM | 是 |
| 枚举器 | 是 |
| 多维带TM | 是 |
7.3 不可判定性
停机问题:给定程序 和输入 , 是否停机?
证明(对角化论证):
假设存在判定器 ,构造:
产生矛盾。
7.4 可判定性层次
| 语言类 | 可判定性 |
|---|---|
| 正则语言 | 成员问题可判定 |
| CFL | 成员问题可判定,等价问题不可判定 |
| 递归语言 | 成员问题可判定 |
| 递归可枚举语言 | 成员问题半可判定 |