哈工大2019年春形式语言与自动机期末复习

本文原载于我的博客,地址:https://blog.guoziyang.top/archives/21/

1 课程简介与基础知识

1.1 课程简介

自动机理论:图灵机、有限状态机、文法,下推自动机

形式语言:经数学定义的语言

课程内容:

  1. 正则语言:有穷自动机、正则表达式、正则语言的性质
  2. 上下文无关语言:上下文无关文法、下推自动机、上下文无关语言的性质
  3. 计算导论:图灵机及其拓展、不可判定性

1.2 基础知识

字母表:符号(或字符)的非空有穷集。

字符串:由某字母表中符号组成的有穷序列。

空串:记为ϵ\epsilon,有0个字符的串。

字母表可以是任意的,但是都有ϵ∉Σ\epsilon\not\in\Sigma

字符串的长度:字符串中符号所占位置的个数,递归定义为
KaTeX parse error: No such environment: equation at position 8: \begin{̲e̲q̲u̲a̲t̲i̲o̲n̲}̲|\omega|=\begin…
字符串的连接:将首尾相接得到新字符串的运算,记为xyx\cdot y或者xy。

字符串的幂:字符串x的n次幂(n$\ge$0),递归定义为
KaTeX parse error: No such environment: equation at position 8: \begin{̲e̲q̲u̲a̲t̲i̲o̲n̲}̲x^n=\begin{case…

字符串集合的连接:得到字符串集合,将两个集合中的串两两连接。

集合的幂An=An1AA^n=A^{n-1}A

克林闭包
Σ=i=0Σi \Sigma^*=\cup_{i=0}^{\infty}\Sigma^i
正闭包
Σ+=i=1Σi \Sigma^+=\cup_{i=1}^{\infty}\Sigma^i
与克林闭包相差一个ϵ\epsilon

语言:若Σ\Sigma为字母表且LΣ\forall L\subset\Sigma^*,则L称为字母表Σ\Sigma上的语言。

,{ϵ},Σ\emptyset,\{\epsilon\},\Sigma^*分别都是任意字母表Σ\Sigma上的语言。

2 有穷自动机

2.2 确定的有穷自动机

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CCx5SaZ9-1591105349225)(https://i.loli.net/2019/06/13/5d01bbc9d91a237478.png)]

确定的有穷自动机(DFA):描述为A,A为一个五元组
A=(Q,Σ,δ,q0,F) A=(Q,\Sigma,\delta,q_0,F)

  1. Q:有穷状态
  2. Σ\Sigma:有穷输入符号集或字母表
  3. δ\deltaQ×ΣQQ\times\Sigma\rightarrow Q,状态转移函数
  4. q0Qq_0\in Q:初始状态
  5. FQF\subset Q:终结状态集或接收状态集

一种描述:状态转移表

哈工大2019年春形式语言与自动机期末复习

扩展转移函数δ^\hat{\delta}Q×ΣQQ\times\Sigma^*\rightarrow Q
KaTeX parse error: No such environment: equation at position 8: \begin{̲e̲q̲u̲a̲t̲i̲o̲n̲}̲\hat{\delta}(q,…
举例:(有误)

哈工大2019年春形式语言与自动机期末复习

DFA的语言与正则语言

若 D = (Q, Σ, δ, q0, F) 是一个DFA, 则 D 接受的语言为
L(D)={ωΣδ^(q0,ω)F} L(D)=\{\omega\in\Sigma^*|\hat{\delta}(q_0,\omega)\in F\}
如果语言 L 是某个 DFA D 的语言, 即 L = L(D), 则称 L 是正则语言。

2.3 非确定有穷自动机

形式定义

非确定有穷自动机(NFA):
A=(Q,Σ,δ,q0,F) A=(Q,\Sigma,\delta,q_0,F)

  1. Q:有穷状态
  2. Σ\Sigma:有穷输入符号集或字母表
  3. δ\deltaQ×Σ2QQ\times\Sigma\rightarrow 2^Q,状态转移函数,即可以转移到多种状态
  4. q0Qq_0\in Q:初始状态
  5. FQF\subset Q:终结状态集或接收状态集

扩展转移函数δ^\hat{\delta}Q×Σ2QQ\times\Sigma^*\rightarrow 2^Q
KaTeX parse error: No such environment: equation at position 8: \begin{̲e̲q̲u̲a̲t̲i̲o̲n̲}̲\hat{\delta(q, …
举例:

哈工大2019年春形式语言与自动机期末复习

DFA与NFA的等价性

如果语言L被NFA接受,当且仅当L被DFA接受。

子集构造法(构造与NFA等价的DFA):如果 NFA N=(QN,Σ,δN,q0,FN)(Q_N, \Sigma, \delta_N, q_0, F_N)构造 DFA D=(QD,Σ,δD,{q0},FD)(Q_D,\Sigma,\delta_D,\{q_0\}, F_D)

  1. QD=2QNQ_D=2^{Q_N}
  2. FD={SSQN,SFN}F_D=\{S|S\subset Q_N,S\cap F_N\not=\emptyset\}
  3. SQN,aΣ,δD(S,a)=pSδN(p,a)\forall S\subset Q_N,\forall a\in\Sigma,\delta_D(S, a)=\cup_{p\in S}\delta_N(p,a)

则有L(D)=L(N)

举例:

哈工大2019年春形式语言与自动机期末复习

2.4 带空转移的非确定有穷自动机

允许状态因空串ϵ\epsilon而转移, 即不消耗输入字符就发生状态的改变。

带空转移非确定有穷自动机(ϵ\epsilon-NFA):
A=(Q,Σ,δ,q0,F) A=(Q,\Sigma,\delta,q_0,F)

  1. Q:有穷状态
  2. Σ\Sigma:有穷输入符号集或字母表
  3. δ\deltaQ×(Σ{ϵ})2QQ\times(\Sigma\cup\{\epsilon\})\rightarrow 2^Q,状态转移函数
  4. q0Qq_0\in Q:初始状态
  5. FQF\subset Q:终结状态集或接收状态集

状态的ϵ\epsilon-闭包:记为ECLOSE(q)E_{CLOSE}(q),表示从q经过ϵ\epsilon序列

可达的全部状态集合。

状态集S的ϵ\epsilon-闭包:ECLOSE(S)=qSECLOSE(q)E_{CLOSE}(S)=\cup_{q\in S}E_{CLOSE}(q)

扩展转移函数δ^\hat{\delta}Q×Σ2QQ\times\Sigma^*\rightarrow 2^Q
KaTeX parse error: No such environment: equation at position 8: \begin{̲e̲q̲u̲a̲t̲i̲o̲n̲}̲\hat{\delta}(q,…
举例:

哈工大2019年春形式语言与自动机期末复习

ϵ\epsilon-NFA的语言:若E=(Q,Σ,δ,q0,FQ,\Sigma,\delta, q_0,F)是一个ϵNFA\epsilon-NFA,则E接受的语言为
L(F)={ωΣδ^(q0,ω)F} L(F)=\{\omega\in\Sigma^*|\hat{\delta}(q_0,\omega)\cap F\not=\emptyset\}
消除空转移的子集构造法

如果ϵNFAE=(QE,Σ,δE,qE,FE)\epsilon-NFA E=(Q_E,\Sigma,\delta_E,q_E,F_E),构造DFA:
D=(QD,Σ,δD,qD,FD) D=(Q_D,\Sigma,\delta_D,q_D,F_D)

  1. QD=2QEQ_D=2^{Q_E},或QD={SQES=ECLOSE(S)}Q_D=\{S\subset Q_E|S=E_{CLOSE}(S)\}
  2. qD=ECLOSE(qE)q_D=E_{CLOSE}(q_E)
  3. FD={SSQD,SFE}F_D=\{S|S\in Q_D,S\cap F_E\not=\emptyset\}
  4. SQD,aΣ,δD(S,a)=ECLOSE(pSδE(p,a))\forall S\in Q_D,\forall a\in\Sigma,\delta_D(S,a)=E_{CLOSE}(\cup_{p\in S}\delta_E(p,a))

那么有L(D)=L(E)L(D)=L(E)

举例:

哈工大2019年春形式语言与自动机期末复习

哈工大2019年春形式语言与自动机期末复习

定理:如果语言L被ϵNFA\epsilon-NFA接受,当且仅当L被DFA接受。

3 正则表达式

3.1 正则表达式

有穷自动机通过机器装置描述正则语言

通过表达式描述正则语言

语言的运算:

哈工大2019年春形式语言与自动机期末复习

注意:语言的幂将字符添加在已有字符串的后面。

四则运算表达式的递归定义:

  1. 任何数都是四则运算表达式
  2. 如果a和b是四则运算表达式,那么a+b,ab,a×b,a÷ba+b,a-b,a\times b,a\div b和(a)都是四则运算表达式

正则表达式的递归定义:

如果Σ\Sigma为字母表,则Σ\Sigma上的正则表达式递归定义为:

  1. \emptyset是一个正则表达式,表示空语言,ϵ\epsilon是一个正则表达式,表示语言{ϵ}\{\epsilon\}aΣ,a\forall a\in\Sigma,a是一个正则表达式,表示语言{a}\{a\}
  2. 如果正则表达式r和s分别表示语言R和S,那么

r+s,rs,r,(r) r+s,rs,r^*,(r)

都是正则表达式,分别表示语言RS,RS,R,RR\cup S,R\cdot S,R^*,R

运算符优先级

括号,星,连接(rs,rsrs,r\cdot s),加(r+s,rsr+s,r\cup s

3.2 有穷自动机和正则表达式

哈工大2019年春形式语言与自动机期末复习

**定理:**若L=L(A)是某DFA A的语言,那么存在正则表达式R满足L=L®。

将DFA转化为正则表达式(递归表达式法)

正则表达式Rij(k)R_{ij}^{(k)}表示从i到j但中间节点不超过k全部路径的字符串集

举例:

哈工大2019年春形式语言与自动机期末复习

哈工大2019年春形式语言与自动机期末复习

注意:自己到自己包括ϵ\epsilon

化简规则:

哈工大2019年春形式语言与自动机期末复习

继续上面的例子:

哈工大2019年春形式语言与自动机期末复习

哈工大2019年春形式语言与自动机期末复习

哈工大2019年春形式语言与自动机期末复习

DFA 到正则表达式(状态消除法)

从DFA中逐个删除状态,保证"自动机"的等价。

哈工大2019年春形式语言与自动机期末复习

哈工大2019年春形式语言与自动机期末复习

注意:在使用状态消除法时,需要利用空转移添加开始状态s和结束状态f。

从正则表达式到有穷自动机

正则表达式定义的语言,都可以被有穷自动机识别。

构造规则:

哈工大2019年春形式语言与自动机期末复习

3.3 正则表达式的代数定律

哈工大2019年春形式语言与自动机期末复习

哈工大2019年春形式语言与自动机期末复习

哈工大2019年春形式语言与自动机期末复习

4 正则语言的性质

4.1 证明语言的非正则性

正则语言的泵引理

如果语言 L 是正则的,那么存在正整数N,它只依赖于L,对ωL\forall\omega\in L,只要ωN|\omega|\ge N,就可以将ω\omega分为三部分ω=xyz\omega=xyz满足:

  1. yϵ(y>0)y\not=\epsilon(|y|>0)
  2. xyN|xy|\le N
  3. k0,xykzL\forall k\ge 0,xy^kz\in L

举例:

哈工大2019年春形式语言与自动机期末复习

若一个语言的一部分已经被证明不是正则的,则这个语言不是正则的。

注意:泵引理只是必要条件,只能用于证伪。

4.2 正则语言的封闭性

正则语言在经过以下运算后得到的仍然为正则语言,称为在这些运算下封闭

哈工大2019年春形式语言与自动机期末复习

求补运算:将所有的接受和非接受状态反转(注意这种方法需要完整的DFA)

可通过证明一个语言的补非正则,而证明该语言非正则

4.3 正则语言的判定性质

定理:具有n个状态的有穷自动机M接受的集合S:

  1. S是非空的,当且仅当M接受某个小于n的串。
  2. S是无穷的,当且仅当M接受某个长度为m的串,nm2nn\le m\le 2n

所以,对于正则语言:

  • 存在算法, 判断其是否为空, 只需检查全部长度小于 n 的串。
  • 存在算法, 判断其是否无穷, 只需检查全部长度由 n 到 2n − 1 的串。

定理:存在算法判定两个有穷自动机是否等价(接受语言相同)

4.4 自动机的最小化

**定义:**DFA A=(Q,Σ,δ,q0,FQ,\Sigma,\delta,q_0,F)中的两个状态p和q,对ωΣ\forall\omega\in\Sigma^*
δ^(p,ω)Fδ^(q,ω)F \hat{\delta}(p,\omega)\in F\longleftrightarrow\hat{\delta}(q,\omega)\in F
则称这两个状态是等价的,否则称为可区分的。

填表算法:如果填表算法不能区分两个状态,则这两个状态等价。

  1. 直接标记终态和非终态之间的状态对
  2. 标记所有经过字符0到达终态和非终态的状态对
  3. 标记所有经过字符1到达终态和非终态的状态对
  4. 剩余的未标记状态对逐个检查,如果该状态对中的每个状态都可经过相同的串到达某可区分的状态对,则该状态对可区分
  5. 而剩余的状态对经过很短的字符串后,都会到达相同状态,所以是等价的

举例:

哈工大2019年春形式语言与自动机期末复习

哈工大2019年春形式语言与自动机期末复习

哈工大2019年春形式语言与自动机期末复习

哈工大2019年春形式语言与自动机期末复习

哈工大2019年春形式语言与自动机期末复习

哈工大2019年春形式语言与自动机期末复习

最小化:根据等价状态,将状态集划分为块,合并等价状态即可

5 上下文无关文法

5.1 上下文无关文法

如果字符串ωΣ\omega\in\Sigma^*满足ω=ωR\omega=\omega^R,则称字符串ω\omega为回文。如果语言L中的字符串都是回文,则称L为回文语言。

回文的递归表示:以Lpal={ω{0,1}ω=ωR}L_{pal}=\{\omega\in\{0,1\}^*|\omega=\omega^R\}为例

  1. 首先ϵ,0,1\epsilon,0,1都是回文
  2. 如果ω\omega是回文,那么0ω00\omega 01ω11\omega 1也是回文

嵌套定义:
AϵA0A1A0A0A1A1 A\rightarrow\epsilon\\A\rightarrow 0\\A\rightarrow 1\\A\rightarrow 0A0\\A\rightarrow 1A1
上下文无关文法(CFG)G=(V,T,P,S)G=(V,T,P,S)

V:变元的有穷集,变元也称为非终结符或语法范畴

T:终结符的有穷集, 且 V\capT = ∅

P:产生式的有穷集, 每个产生式包括:

  1. 一个变元, 称为产生式的头或左部。
  2. 一个产生式符号\rightarrow, 读作定义为。
  3. 一个(VT)(V\cup T)^*中的符号串, 称为体或右部。

SVS\in V:初始符号,文法开始的地方

字符使用的一般规定:

哈工大2019年春形式语言与自动机期末复习

从字符串到文法变元的过程,称为归约,逆过程称为派生。

举例:

哈工大2019年春形式语言与自动机期末复习

派生和归约的形式定义:若CFG G=(V, T, P, S),设α,β,γ(VT)\alpha,\beta,\gamma\in(V\cup T)^*AVA\in VAγPA\rightarrow\gamma\in P,那么称G中由αAβ\alpha A\beta可派生出αγβ\alpha\gamma\beta,记为

哈工大2019年春形式语言与自动机期末复习

相应的,称αγβ\alpha\gamma\beta可归约为αAβ\alpha A\beta

举例:

哈工大2019年春形式语言与自动机期末复习

最左派生:为限制派生的随意性, 要求只替换符号串中最左边变元的派生过程,称为最左派生。只替换最右的, 称为最右派生。

哈工大2019年春形式语言与自动机期末复习

哈工大2019年春形式语言与自动机期末复习

任何派生都有等价的最左派生和最右派生。

文法的语言:CFG G=(V, T, P, S)的语言定义为

哈工大2019年春形式语言与自动机期末复习

那么符号串ω\omega在L(G)中,要满足:

  1. ω\omega仅由终结符组成
  2. 初始符号S能派生出ω\omega

上下文无关语言定义:语言L是由某个CFG G 定义的语言,即 L = L(G),则称 L 为上下文无关语言。

哈工大2019年春形式语言与自动机期末复习

如果有两个文法 CFG G1G_1和CFG G2G_2,满足L(G1)=L(G2)L(G_1)=L(G_2),则称G1G_1G2G_2是等价的。

**句型:**若 CFG G = (V, T, P, S),初始符号 S 派生出来的符号串,称为 G 的句型, 即

哈工大2019年春形式语言与自动机期末复习

哈工大2019年春形式语言与自动机期末复习

  • 只含有终结符的句型, 也称为 G 的句子
  • 而 L(G) 就是文法 G 全部的句子

所有的正则语言都是上下文无关语言

5.2 语法分析树

派生或者归约的过程可以表示成树形结构

定义:CFG G = (V, T, P, S) 的语法分析树(语法树或派生树) 为

  1. 每个内节点标记为 V 中的变元符号
  2. 每个叶节点标记为VT{ϵ}V\cup T\cup\{\epsilon\}中的符号
  3. 如果某内节点标记是 A, 其子节点从左至右分别为X1,X2,,XnX_1,X_2,…,X_n,那么AX1,X2,,XnPA\rightarrow X_1,X_2,…,X_n\in P,若有Xi=ϵX_i=\epsilon,则ϵ\epsilon是A唯一子节点,且AϵPA\rightarrow\epsilon\in P

**定义:**语法树的全部叶结点从左到右连接起来,称为该树的产物或者结果

如果树根节点是初始符号 S,叶节点是终结符或 ε,那么该树的产物属于 L(G)。

语法树中标记为 A 的内节点及其全部子孙节点构成的子树,称为 A 子树。

语法分析树和派生的等价性

哈工大2019年春形式语言与自动机期末复习

语法树唯一确定最左 (右) 派生

每棵语法分析树都有唯一的最左 (右) 派生,给定 CFG G = (V, T, P, S), A\inV , 以下命题等价

哈工大2019年春形式语言与自动机期末复习

5.3 文法和语言的歧义性

如果 CFG G 使某些符号串有两棵不同的语法分析树, 称文法 G 是歧义的。

例如:

哈工大2019年春形式语言与自动机期末复习

可重新设计文法来消除歧义性

语言的固有歧义性:定义同样的语言可以有多个文法,如果 CFL L 的所有文法都是歧义的,那么称语言 L 是固有歧义的。

判断给定的语言是否歧义是一个不可判定的问题

5.4 文法的化简与范式

前提:不改变语言

步骤:

  1. 消除无用符号
  2. 消除ϵ\epsilon产生式:AϵA\rightarrow\epsilon
  3. 消除单元产生式:ABA\rightarrow B

无用符号:CFG G = (V, T, P, S), 符号X(VT)X\in(V\cup T)

哈工大2019年春形式语言与自动机期末复习

消除无用符号:首先消除全部非产生的符号,再消除全部非可达的符号

产生的符号集:每个T中的符号(终结符)都是产生的,AαPA\rightarrow\alpha\in Pα\alpha中符号都是产生的, 则A是产生的。(从终结符向前寻找)

可达的符号集:符号 S 是可达的,AαPA\rightarrow\alpha\in P且A是可达的,则α\alpha中符号都是可达的。(从起始符向后寻找)

举例:消除如下文法的无用符号:SABαAbS\rightarrow AB|\alpha,A\rightarrow b
SαAbSa 先消除非产生的:\\S\rightarrow\alpha\\A\rightarrow b\\再消除非可达的:\\S\rightarrow a
消除ϵ\epsilon-产生式

文法中形如$A\rightarrow\epsilon 的产生式称为\epsilon$-产生式

确定空可变元:

  1. 如果AϵA\rightarrow\epsilon, 则 A 是可空的
  2. 如果$ B\rightarrow\alpha \alpha$中的每个符号都是可空的, 则 B 是可空的

替换产生式

哈工大2019年春形式语言与自动机期末复习

消除单元产生式:

哈工大2019年春形式语言与自动机期末复习

消除单元产生式:

  1. 删除全部形为ABA\rightarrow B的单元产生式
  2. 对每个单元对[A, B],将B的产生式复制给A

定理:每个不带ϵ\epsilon的 CFL 都可由一个不带无用符号, ϵ\epsilon-产生式和单元产生式的文法定义。

5.4.1 文法化简的可靠顺序

  1. 消除ϵ\epsilon-产生式
  2. 消除单元产生式
  3. 消除非产生的无用符号
  4. 消除非可达的无用符号

5.4.2 限制文法格式

乔姆斯基范式CNF:每个不带ϵ\epsilon的CFL都可由这样的CFG G定义,G中每个产生式都形为
ABCAa A\rightarrow BC或A\rightarrow a
其中A、B和C都是变元,a是终结符

CFG转为CNF的方法

  1. 将产生式AX1X2Xm(m2)A\rightarrow X_1X_2…X_m(m\ge 2)中每个终结符a替换为CaC_a,并增加新产生式CaaC_a\rightarrow a
  2. 引入新变元D1,D2,,Dm2D_1,D_2,…,D_{m-2},将产生式AB1B2BmA\rightarrow B_1B_2…B_m替换为一组级联的产生式

AB1D1D1B2D2...Dm2Bm1Bm A\rightarrow B_1D_1\\D_1\rightarrow B_2D_2\\...\\D_{m-2}\rightarrow B_{m-1}B_m

格雷巴赫范式

每个不带ϵ\epsilon的CFL都可由这样的CFG G定义,G中每个产生式都形为AaαA\rightarrow a\alpha

其中A是变元,a是终结符,α\alpha是零或多个变元的串

直接左递归:文法中形式为$ A\rightarrow Aα $的产生式, 称为直接左递归

消除直接左递归:

  1. 若 A 产生式AAα1Aα2Aαnβ1β2βmA\rightarrow A\alpha_1|A\alpha_2|…|A\alpha_n|\beta_1|\beta_2|…|\beta_m

  2. 引入新变元B,并用如下产生式替换
    Aβ1β2...βmβ1Bβ2B...βmBBα1α2...αnα1Bα2B...αnB A\rightarrow \beta_1|\beta_2|...|\beta_m|\beta_1B|\beta_2B|...|\beta_mB\\B\rightarrow \alpha_1|\alpha_2|...|\alpha_n|\alpha_1B|\alpha_2B|...|\alpha_nB

间接左递归:文法中如果有形式为
ABα...BAβ... A\rightarrow B\alpha|...\\B\rightarrow A\beta|...
的产生式, 称为间接左递归。

消除间接左递归:

  1. 将文法中变元重命名为A1,A2,,AnA_1, A_2, · · · , A_n

  2. 通过代入, 使产生式都形如
    AiAjαAiaα A_i\rightarrow A_j\alpha\\A_i\rightarrow a\alpha
    但要求iji\le j

  3. 消除直接左递归AiAiβA_i\rightarrow A_i\beta, 再代入其他产生式

举例:将以下文法转化为GNF:
SABABSbBSAa S\rightarrow AB\\A\rightarrow BS|b\\B\rightarrow SA|a
哈工大2019年春形式语言与自动机期末复习

6 下推自动机

6.1 下推自动机

形式定义:PDA,P为七元组
P=(Q,Σ,Γ,δ,q0,Z0,F) P=(Q,\Sigma,\Gamma,\delta,q_0,Z_0,F)

  1. Q,有穷状态集
  2. Σ\Sigma,有穷输入符号集
  3. Γ\Gamma,有穷栈符号集
  4. δ\deltaQ×(Σ{ϵ})×Γ2Q×ΓQ\times (\Sigma\cup\{\epsilon\})\times\Gamma\rightarrow 2^{Q\times\Gamma^*},状态转移函数
  5. q0Qq_0\in Q,初始状态
  6. Z0ΓΣZ_0\in\Gamma-\Sigma,栈底符号
  7. FQF\subset Q,接收状态集或终态集

本质上是带有栈的ϵ\epsilon-NFA

举例:

哈工大2019年春形式语言与自动机期末复习

哈工大2019年春形式语言与自动机期末复习

瞬时描述:为描述 PDA 瞬间的格局, 定义Q×Σ×ΓQ\times\Sigma^*\times\Gamma^*中三元组
(q,ω,γ) (q,\omega,\gamma)
为瞬时描述(ID),表示此时PDA处于状态q,剩余输入串ω\omega,栈为γ\gamma

转移符号:

哈工大2019年春形式语言与自动机期末复习

对 PDA P 的一个合法 ID 序列 (计算):

  1. 把相同的字符串加到所有ID的输入串末尾, 所得到的计算合法
  2. 把相同的栈符号串加到所有ID的栈底之下, 所得到的计算合法
  3. 把所有ID中都未消耗的部分输入串去掉, 所得到的计算合法

哈工大2019年春形式语言与自动机期末复习

哈工大2019年春形式语言与自动机期末复习

6.2 下推自动机接受的语言

PDA P=(Q,Σ,Γ,δ,q0,Z0,F)P=(Q,\Sigma,\Gamma,\delta,q_0,Z_0,F)以两种方式接受语言

哈工大2019年春形式语言与自动机期末复习

如:

哈工大2019年春形式语言与自动机期末复习

此种方式无栈底符号

从终态方式到空栈方式:如果PDA $P_F $以终态方式接受语言L,则存在PDA $P_N $以空栈方式接受L

从空栈方式到终态方式:如果PDA $P_N $以空栈方式接受语言L,则存在PDA $P_F $以终态方式接受L

哈工大2019年春形式语言与自动机期末复习

6.3 下推自动机与文法的等价性

PDA到CFG:

哈工大2019年春形式语言与自动机期末复习

构造与文法等价的 PDA

如果CFG G = (V, T, P′, S),构造PDA
P=({q},T,VT,δ,q,S,) P=(\{q\},T,V\cup T,\delta,q,S,\emptyset)
其中,δ\delta

  1. AV\forall A\in V
    δ(q,ϵ,A)={(q,β)AβP} \delta(q,\epsilon,A)=\{(q,\beta)|A\rightarrow\beta\in P'\}

  2. aT\forall a\in T
    δ(q,a,a)={(q,ϵ)} \delta(q,a,a)=\{(q,\epsilon)\}

那么L(G)=N(G)

举例:

哈工大2019年春形式语言与自动机期末复习

构造与 GNF 格式文法等价的 PDA

如果 GNF 格式的 CFG G = (V, T, P′, S), 那么构造 PDA
P=({q},T,V,δ,q,S,) P=(\{q\}, T, V, \delta, q, S, \emptyset)
为每个产生式, 定义δ\delta为:
δ(q,a,A)={(q,β)AaβP} \delta(q,a,A)=\{(q,\beta)|A\rightarrow a\beta\in P'\}
举例:

哈工大2019年春形式语言与自动机期末复习

由 PDA 到 CFG

如果 PDA P , 有 L = N§, 那么 L 是上下文无关语言。

构造与 PDA 等价的 CFG

哈工大2019年春形式语言与自动机期末复习

6.4 确定性下推自动机

如果 PDA P=(Q,Σ,Γ,δ,q0,Z0,FQ, \Sigma, \Gamma, \delta, q_0, Z_0, F) 满足

  1. aΣ{ϵ}δ(q,a,X)\forall a\in\Sigma\cup\{\epsilon\},\delta(q,a,X)至多有一个动作
  2. aΣ\exists a\in\Sigma,如果δ(q,a,X)\delta(q,a,X)\not=\emptyset,那么δ(q,ϵ,X)=\delta(q,\epsilon,X)=\emptyset

则称P为确定性下推自动机(DPDA)

DPDA P以终态方式接受的语言L§称为DCFL

DPDA与PDA不等价

正则语言与 DPDA

定理:如果 L 是正则语言, 那么存在 DPDA P 以终态方式接受 L, 即 L = L§

定义:如果语言 L 中不存在两个不同的字符串 x 和 y,使 x 是 y 的前缀,称语言 L 满足前缀性质

定理:如果有DPDA P且L=N§,当且仅当L有前缀性质且存在DPDA P′使
L=L(P′)

DPDA 与无歧义文法

定理:DPDA P,语言 L = N§,那么 L 有无歧义的 CFG

定理:DPDA P,语言 L = L§,那么 L 有无歧义的 CFG

7 上下文无关语言的性质

7.1 上下文无关语言的泵引理

任何Σ\Sigma上的所有语言是不可数的

任何Σ\Sigma上的所有CFL是可数的

语法分析树的大小:

对于乔姆斯基范式文法 G = (V, T, P, S) 的语法树,如果产物为终结符串ω\omega,且树中最长路径的长度是n,那么ω2n1|\omega|\le 2^{n-1}

上下文无关语言的泵引理

如果语言L时CFL,那么存在正整数N,它只依赖于L,对zL\forall z\in L,只要zN|z|\ge N,就可以将z分成五部分z=uvwxyz=uvwxy,满足

  1. vxϵvx\not=\epsilon(或vx>0|vx|>0
  2. vwxN|vwx|\le N
  3. i0,uviwxiyL\forall i\ge 0,uv^iwx^iy\in L

举例:证明L={0n1n2nn1}\{0^n1^n2^n|n\ge 1\}不是上下文无关语言

  1. 假设L是CFL,那么存在整数N,对zL(zN)\forall z\in L(|z|\ge N)满足泵引理
  2. 从L中去z=0N1N2Nz=0^N1^N2^N,则显然zLz\in Lz=3NN|z|=3N\ge N
  3. 由泵引理,zz可被分为z=uvwxyz=uvwxy,且有vwxN|vwx|\le Nvxϵvx\not=\epsilon
  4. 那么vwx只能包含一种或两种字符:
    1. 一种字符, 或为 0, 或为 1, 或为 2, 那么uwy∉Luwy\not\in L
    2. 两种字符, 或为 0 和 1, 或为 1 和 2, 那么也有uwy∉Luwy\not\in L
  5. 与泵引理uwy=uv0wx0yLuwy=uv^0wx^0y\in L矛盾,假设不成立
  6. L不是上下文无关的

举例:证明L={www{0,1}}L=\{ww|w\in\{0,1\}^*\}不是上下文无关的

哈工大2019年春形式语言与自动机期末复习

7.2 上下文无关语言的封闭性

代换:两个字母表 Σ 到 Γ 的函数$ s : \Sigma\rightarrow 2^{\Gamma∗} 称为代换,\Sigmaas中的一个字符a在s的作用下为\GammaLa上的一个语言 La,即s(a)=L_as,扩展s的定义到字符串,s(\epsilon)={\epsilon},s(xa)=s(x)s(a)s,再扩展s到语言,对\forall L\subset\Sigma^*s(L)=\cup_{x\in L}s(x)$

上下文无关语言在并、连接、闭包、正闭包、同态、反转、代换、逆同态下封闭。

CFL 对交/补运算不封闭

若 L 是 CFL 且 R 是正则语言, 则 L\capR 是 CFL

应用举例:

哈工大2019年春形式语言与自动机期末复习

7.3 上下文无关语言的判定性质

可判定的 CFL 问题

  • 空性: 只需判断文法的开始符号S是否为非产生的
  • 有穷性和无穷性
    1. 用不带无用符号的CNF的产生式画有向图
    2. 变元为顶点, 若有A$\rightarrow $BC,则A到B和C各画一条有向边
    3. 检查图中是否有循环
  • 成员性:利用CNF范式,有CYK算法检查串w是否属于L

CYK算法

CNF G=(V, T, P, S),以O(n3n^3)时间检查"w=a1a2anL(G)w=a_1a_2…a_n\in L(G)?"

以动态规划的方式,在表中由下至上逐行计算XijX_{ij},再检查"SX1nS\in X_{1n}?"

计算首行Xii={AAaiP}X_{ii}=\{A|A\rightarrow a_i\in P\}

计算其他Xij={Aik<j,BCXikXk+1,j,ABCP}X_{ij}=\{A|i\le k<j,BC\in X_{ik}X_{k+1,j},A\rightarrow BC\in P\}

哈工大2019年春形式语言与自动机期末复习

举例:CNF G 如下, 用 CYK 算法判断 bbabaa\inL(G)?
SABBCABAaBCCbCABa S\rightarrow AB|BC\\A\rightarrow BA|a\\B\rightarrow CC|b\\C\rightarrow AB|a
哈工大2019年春形式语言与自动机期末复习

7.4 乔姆斯基文法体系

如果文法 G = (V, T, P, S),符号串α(VT)V(VT),β(VT)\alpha\in (V\cup T)^∗V (V\cup T)^∗,\beta\in (V\in T)^∗,产生式都形如αβ\alpha\rightarrow\beta,即每个产生式的左部α\alpha中至少要有一个变元,那么

  1. 称G为0型文法或短语结构文法
  2. βα|\beta|\ge |\alpha|,称G为1型文法或上下文有关文法
  3. αV\alpha\in V,称G为2型文法或上下文无关文法
  4. αβ\alpha\rightarrow\beta都形如AaBA\rightarrow aBAaA\rightarrow a,称G为3型文法或正则文法

8 图灵机

8.1 图灵机

哈工大2019年春形式语言与自动机期末复习

图灵机M为七元组M=(Q,Σ,Γ,δ,q0,B,F)M=(Q,\Sigma,\Gamma,\delta,q_0,B,F)

  1. Q:有穷状态集
  2. Σ\Sigma:有穷输入符号集
  3. Γ\Gamma:有穷带符号集,且总有ΣΓ\Sigma\subset\Gamma
  4. δ\deltaQ×ΓQ×Γ×{L,R}Q\times\Gamma\rightarrow Q\times\Gamma\times\{L,R\}
  5. q0Qq_0\in Q:初始状态
  6. BΓΣB\in\Gamma-\Sigma:空格符号
  7. FQF\subset Q:终态集或接受状态集

图灵机的动作及状态转移图:

有穷控制器处于状态 q,带头所在单元格为符号 X,如果动作的定义为δ(q,X)=(p,Y,L)\delta(q,X)=(p,Y,L),表示状态转移到了p,单元格改为Y,然后将带头向左移动一个单元格

哈工大2019年春形式语言与自动机期末复习

举例:

哈工大2019年春形式语言与自动机期末复习

哈工大2019年春形式语言与自动机期末复习

瞬时描述

图灵机虽有无穷长的带, 但非空内容总是有限的. 因此用带上全部的非空符号、当前状态和带头位置, 同时定义瞬时描述(ID)为:
X1X2...Xi1qXiXi+1...Xn X_1X_2...X_{i-1}qX_iX_{i+1}...X_n

  1. 图灵机当前状态q
  2. 带头在左起第i个非空格符上
  3. X1X2XnX_1X_2…X_n是最左到最右非空格内容
  4. 为避免混淆, 一般假定Q和Γ\Gamma不相交

转移符号

如:

哈工大2019年春形式语言与自动机期末复习

图灵机的语言

如果M=(Q,Σ,Γ,δ,q0,B,F)M=(Q,\Sigma,\Gamma,\delta,q_0,B,F)是一个图灵机, 则 M 接受的语言为
L(M)={ωωΣ,q0ωαpβ,pF,α,βΓ} L(M)=\{\omega|\omega\in\Sigma^*,q_0\omega\vdash^*\alpha p\beta,p\in F,\alpha,\beta\in\Gamma^*\}
如果 L 是图灵机 M 的语言, 即 L = L(M), 则称 L 是递归可枚举语言

对接受和不接受的输入, 都保证停机的图灵机, 所接受的语言称为递归语言

如果$ f(i_1, i_2, . . . , i_k) 对所有i_1, i_2, . . . , i_k ,都有定义, 称 f 为全递归函数,被图灵机计算的函数 f(i_1, i_2, . . . , i_k) $称作部分递归函数