计算理论导引第二章
第二章
·上下文无关法
··替换规则
A->0A1
\(G_1\){A->B
B->#
用局部变化规律和初始条件描述一个过程
派生:获取一个字符串的替换序列成为派生
由CFG生成的语言是CFL
上下文无关法是一个四元组(V,Σ,R,S)
变元集,终结符集,规则集,起始变元
··设计上下文无关文法
···四步
···歧义性
- 定义一种以固定次序替换变元的派生类型。如果在每一步 都是替换剩下的最左边的变元,则称这个派生是最左派生。
- 如果字符串 𝑤 在上下文无关文法 G 中有两个或两个以上 不同的最左派生,则称在 G 中歧义地产生字符串 𝑤 。如 果文法 G 歧义地产生某个字符串,则称 G 是歧义的。
··乔姆斯基范式
规则如下:
A->BC
A->a
*BC不能是起始变元,允许S->𝜀(S是起始变元)
~~任一 CFL 都可以用乔姆斯基范式的 CFG 产生。
~~=>(ppt_24)
加头(添加新的起始变元\(S_0\)保证起始变元不出现在右端)
去尾(删除除了\(S_0\)->𝜀的所有𝜀规则)
*在上一步中补充可能出现的情况
删除单一规则(删掉A->B)
把所有的规则变成A->BC形式
·下推自动机
··概念PDA(形式化定义)
下推自动机是一个 6 元组 𝑄, 𝛴, Γ, 𝛿, 𝑞0, 𝐹,这里 𝑄, 𝛴, Γ 和 𝐹 都是有穷集合,并且
𝑄 是状态集。
𝛴 是输入字母表。
Γ 是栈字母表。
𝛿:𝑄 × 𝛴𝜀 × Γ𝜀 → 𝒫 (𝑄 × Γ𝜀) 是转移函数。
𝑞0 ∈ 𝑄 是起始状态。
𝐹 ⊆ 𝑄 是接受状态集。
栈的作用在于可以保存无限信息容量,有推入和弹出操作
例如, {\(0^𝑛\) \(1^𝑛\) |𝑛 ≥ 0}DFA没有存储功能不能记下n的数量,但PDA可以每读一个0,就将0下推,直到读入1,每读一个1,就将0弹出,0被清空刚好读完串,即可接受这个输入
接受过程:
𝑀 = 𝑄, 𝛴, Γ, 𝛿, 𝑞0, 𝐹 的计算如下:
接收输入 𝑤 = 𝑤1𝑤2 ⋯ 𝑤𝑚, 𝑤𝑖 ∈ 𝛴𝜀
存在状态序列 𝑟0,𝑟1,⋯,𝑟𝑚 ∈ 𝑄
存在字符串序列 𝑠0,𝑠1,⋯ ,𝑠𝑚 ∈
\(Γ^∗\) ,满足下列3个条件:
(1)𝑟0 = 𝑞0 且 𝑠0 = 𝜀
(初始状态)(2) (𝑟_𝑖+1, 𝑏)∈ 𝛿(𝑟_𝑖, 𝑤_𝑖+1, 𝑎),
因为PDA允许非确定性其中 𝑠𝑖 = 𝑎𝑡 ,𝑠𝑖+1 = 𝑏𝑡 , 这里 𝑎,𝑏 ∈ Γ𝜀 和 𝑡 ∈
\(Γ ^∗\),0 ≤ 𝑖 ≤ 𝑚 − 1, 注:𝑀 在每一步都完全按照当时的状态,栈顶符号和下一个输入符号发生状态转移。
(3)𝑟_𝑚 ∈ 𝐹
𝑠𝑖 是 𝑀 接受分支中的栈内容序列。
相当于有栈的NFA
··{\(0^𝑛\) \(1^𝑛\) |𝑛 ≥ 0}例子
目标:输入读完,栈恰好为空
令 𝑀1 = {𝑄, 𝛴, Γ, 𝛿, 𝑞1, 𝐹 },其中 𝑄 = 𝑞1, 𝑞2,𝑞3,𝑞4 𝛴 = {0, 1} Γ = {0, $} 𝐹 = {𝑞1, 𝑞2} 𝛿 由下表给出,表中空白项表示 ∅ 。
未完待续