- 字母表 Σ:有限符号集合,如 Σ={0,1}
- 字符串:字母表中符号的有限序列
- 空串 ϵ:长度为0的字符串
- 语言 L:Σ∗ 的子集,即字符串的集合
- 并:L1∪L2
- 连接:L1⋅L2={xy∣x∈L1,y∈L2}
- 闭包:L∗=⋃i=0∞Li
- 正闭包:L+=⋃i=1∞Li
| 类型 | 文法 | 自动机 | 产生式形式 |
| ---- | -------------- | -------------- | ----------------------- | ------ | ---- | ----- | --- |
| 0型 | 无限制文法 | 图灵机 | α→β |
| 1型 | 上下文有关文法 | 线性有界自动机 | α→β,∣α∣≤∣β∣ |
| 2型 | 上下文无关文法 | 下推自动机 | A→γ |
| 3型 | 正则文法 | 有限自动机 | A→aB 或 A→a |
DFA 是五元组 M=(Q,Σ,δ,q0,F):
- Q:有限状态集
- Σ:输入字母表
- δ:Q×Σ→Q:转移函数
- q0:初始状态
- F⊆Q:接受状态集
示例:识别以 “01” 结尾的字符串的 DFA:
q0 --0--> q1
q0 --1--> q0
q1 --0--> q1
q1 --1--> q2 (接受)
q2 --0--> q1
q2 --1--> q0
NFA 允许:
- 同一状态同一输入有多个转移
- ϵ 转移(不消耗输入)
- δ:Q×(Σ∪{ϵ})→2Q
子集构造法:将 NFA 转换为 DFA。
DFA 状态=NFA 状态集的子集
最坏情况下,n 状态 NFA 可能产生 2n 状态 DFA。
Hopcroft 算法:
- 初始划分:接受状态 / 非接受状态
- 对每个划分块,检查是否可进一步分割
- 重复直到不可分割
时间复杂度:O(nlogn)
| 操作 | 语法 | 含义 |
| ---- | --------- | --------------------- | -------------------- |
| 并 | R1∣R2 | L(R1)∪L(R2) |
| 连接 | R1R2 | L(R1)⋅L(R2) |
| 闭包 | R∗ | L(R)∗ |
正则表达式 → NFA:Thompson 构造法。
DFA → 正则表达式:状态消除法。
封闭性:正则语言对并、连接、闭包、补、交、差运算封闭。
泵引理(Pumping Lemma):
若 L 是正则语言,则存在泵长度 p,使得 L 中任何长度 ≥p 的字符串 s 可分解为 s=xyz,满足:
- ∣xy∣≤p
- ∣y∣>0
- ∀i≥0:xyiz∈L
用途:证明某语言不是正则语言。
示例:L={0n1n∣n≥0} 不是正则语言。
L 是正则语言 ⟺ L 的等价类数有限。
等价关系:x≡Ly⟺∀z:xz∈L⇔yz∈L
四元组 G=(V,Σ,R,S):
- V:非终结符集合
- Σ:终结符集合
- R:产生式规则 A→α
- S:起始符号
示例:匹配括号的语言 {(n)n∣n≥0}:
S→(S)∣ϵ
最左推导:每次替换最左边的非终结符。
最右推导:每次替换最右边的非终结符。
歧义性:如果一个字符串有多棵不同的语法树,则文法是歧义的。
示例:算术表达式文法:
E→E+E∣E×E∣(E)∣id
字符串 id + id × id 有两棵语法树(歧义)。
消除歧义:引入优先级和结合性。
E→E+T∣T,T→T×F∣F,F→(E)∣id
每个产生式形如 A→BC 或 A→a。
任何 CFG 都可转换为 CNF。
判断字符串 w 是否属于 CNF 文法的语言:
T[i][j]={A∣A→BC,B∈T[i][k],C∈T[k+1][j]}
时间复杂度:O(n3∣G∣)
七元组 M=(Q,Σ,Γ,δ,q0,Z0,F):
- Γ:栈字母表
- δ:Q×(Σ∪{ϵ})×(Γ∪{ϵ})→2Q×(Γ∪{ϵ})
- Z0:初始栈符号
CFG → PDA:对每个非终结符,猜测产生式并匹配终结符。
PDA → CFG:将 PDA 的状态对编码为 CFG 的非终结符。
DPDA 对每个输入和栈顶最多有一个转移。
DPDA 识别的语言是 CFL 的真子集,称为确定性上下文无关语言(DCFL)。
若 L 是 CFL,则存在泵长度 p,使得 L 中任何长度 ≥p 的字符串 s 可分解为 s=uvxyz,满足:
- ∣vxy∣≤p
- ∣vy∣>0
- ∀i≥0:uvixyiz∈L
示例:L={anbncn∣n≥0} 不是 CFL。
| 运算 | 封闭性 |
|---|
| 并 | 封闭 |
| 连接 | 封闭 |
| 闭包 | 封闭 |
| 交 | 不封闭 |
| 补 | 不封闭 |
| 与正则语言交 | 封闭 |
七元组 M=(Q,Σ,Γ,δ,q0,qaccept,qreject):
- Γ⊃Σ:带字母表,包含空白符 ⊔
- δ:Q×Γ→Q×Γ×{L,R}
| 变体 | 与标准TM等价 |
|---|
| 多带TM | 是 |
| 非确定性TM | 是 |
| 枚举器 | 是 |
| 多维带TM | 是 |
停机问题:给定程序 P 和输入 I,P(I) 是否停机?
证明(对角化论证):
假设存在判定器 H(P,I),构造:
D(P)={loophaltif H(P,P)=haltsif H(P,P)=loops
D(D) 产生矛盾。
| 语言类 | 可判定性 |
|---|
| 正则语言 | 成员问题可判定 |
| CFL | 成员问题可判定,等价问题不可判定 |
| 递归语言 | 成员问题可判定 |
| 递归可枚举语言 | 成员问题半可判定 |