前言

  • 形式语言理论:乔姆斯基发现文法,用文法产生语言的每个句子。
  • 自动机理论:克林建立了有穷状态自动机,为识别语言的系统
  • 文法与自动机是等价
  • 文法与自动机的运算对象:集合

文法

文法构造

  • 例1

  • 例2

  • 例3

  • 例4

  • 例5

  • 例6

文法分类

  • 标准

  • 例子

线性文法与FA的转换

右线性文法

FA -> 文法

文法 -> FA

左线性文法

FA -> 文法

  • 先预处理

  • 规则:

  • 例子

文法 -> FA

  • 规则

  • 例子

DFA、NFA、ε-NFA转换

ε-NFA -> NFA

前置知识

  • ϵCLOSURE(q0)\epsilon-CLOSURE(q_0) = { p | 从q0q_0pp有一条标记为ϵ\epsilon 的路}
  • ε-NFA 的 状态转移函数

转换过程

  • 终止状态
    F 为 ε-NFA 的
    F2 为转化后NFA的

  • 转化后NFA的 转移函数

    • 为 去除 ε列δ^\hat\delta

例子

NFA -> DFA

  • 带 NFA 中 终止状态 的 状态簇 为 新DFA 的终止状态
  • 例子


FA 与 RE 的转化

RE -> ε-NFA

  • n = 0

  • n = k+1


  • 例子

DFA -> RE

例子

  • 预处理:

    • 用标记为X和Y的状态将M“括起来”:
      在状态转移图中增加标记为X和Y的状态, 从标记为X的状态到标记为q0的状态引一条标记为ε的弧;
      从标记为q(q∈F)的状态到标记为Y的状态分别引一条标记为ε的弧。
    • 去掉所有的不可达状态。
  • 去掉状态q3:

  • 去掉状态q4

  • 合并从标记为q2的状态到标记为Y的状态的两条并行弧。

  • 去掉状态q0

  • 并弧

  • 去掉状态q1

  • 去掉状态q2

注意事项

  • 不计算自身到自身的弧,如果状态q的入度为n,出度为m,则将状态q及其相关的弧去掉之后,需要添加n*m条新弧。

泵引理 与 封闭性

泵引理

定理

应用

  • 例1

  • 例2

  • 例3

  • 例4

封闭性

定义

交、并、补、连接、闭包、反转、同态、逆同态 运算都具有封闭性

  • 补运算的封闭性
    如果LLΣ\Sigma 上的RE, 那么L=ΣL\overline{L} = \Sigma^{*} - L 也是 正则的。

  • 交运算的封闭性
    如果LLMM 是 RE, 那么LML\cap M 也是 正则的。

  • 同态 的定义

  • 逆同态 的定义

例子

  • 例1

  • 例2

  • 例3

Myhill-Nerode定理

定理规定以下三个命题同时成立:

  • LΣL \subseteq \Sigma^*RLRL
  • LLΣ\Sigma^*上的某一个具有 有穷指数右不变等价关系
  • RLR_L具有有穷指数

右不变等价关系

定义:设RRΣ\Sigma^{*}上的等价关系,对于x,yΣ\forall{x,y} \in \Sigma^{*}, 如果xRyxRy成立,则xzRyzxzRyz也成立,zΣz\in\Sigma^{*}, 则RR被称为 右不变等价关系

  • 关系RmR_mRLR_L是 右不变等价关系

关系RM

  • 设DFA M,M所确定的ΣΣ^*上的关系RMR_M 定义为:
    对于x,yΣ∀x,y∈Σ*
    • xRMyδ(q0,x)=δ(q0,y)x R_M y ⇔ δ(q0,x)=δ(q0,y)
    • 也就是说:xRMyqQx,yset(q)x R_M y ⇔ ∃q∈Q,x,y∈set(q)
    • 或者说:M从q0q_0开始读入x和y以后进入同一个状态。

关系RL:

  • LΣL ⊆ Σ*,L确定的Σ*上的关系RLR_L 定义为:
    对于x,yΣ∀x,y∈Σ*
    xRLy(zΣxzLyzL)x R_L y ⇔ (∀z∈Σ^*,xz∈L ⇔ yz∈L)

二者关系

  • 如果xRMyx R_M y,则 一定有xRL(M)yx R_{L(M)} y
  • 如果xRL(M)yx R_{L(M)} y,则 不一定有xRMyx R_M y
  • Σ/RL(M)|\Sigma^{*}/R_{L(M)}|Σ/RM|\Sigma^{*}/R_M|QQ,RMR_MRL(M)R_{L(M)}加细

例子

关系的指数

RR 的指数

RRΣ\Sigma^{*}上的等价关系,则称Σ/R|\Sigma^{*} / R|RR 关于Σ\Sigma^{*}的指数。

RR 的一个等价类

Σ\Sigma^{*}的关于R的一个等价类,也就是Σ/R\Sigma^{*}/R的任意一个元素

极小化

定义

最小状态DFA的含义:

  • 没有多余状态(死状态)

    • 如何消除多余状态?删除即可。
  • 没有两个状态是互相等价(不可区别)

    • 兼容性(一致性)条件——同是终态或同是非终态
    • 传播性(蔓延性)条件——对于所有输入符号,状态s和状态t必须转换到等价的状态里。

例子:

最小化下图所示的DFA

  1. 分成终态和非终态:
  • 将M的状态分为两个子集一个由终态 k1={C,D,E,F}组成,一个由非终态 k2={S,A,B}组成。
  1. 考察{S,A,B}是否可分。

    因为A经过a到达C属于k1.而S经过a到达A属于k2。B经过a到达A属于k2,所以K2继续划分为{S,B},{A}。

  2. 考察{S,B}是否可再分:
    B经过b到达D属于k1。S经过b到达B属于k2,所以S,B可以划分。划分为{S},{B}

  3. 考察{C,D,E,F}是否可再分:
    因为C,D,E,F经过 a和b 到达的状态都属于{C,D,E,F}=k1 所以相同,所以不可再分。

  4. {C,D,E,F}以{D}来代替则,因为CDEF相同,你也可以用C来代替。无所谓的最小化的DFA如图:
    极小化_例3

RE运算

定义

正则表达式(regular expression,RE)

  1. Φ\PhiΣ\Sigma上的RE,它表示语言Φ\Phi
  2. ϵ\epsilon 是∑上的RE,它表示语言{ϵ}\{\epsilon\}
  3. 对于aΣ\forall{a}\in \Sigma,a{a}Σ\Sigma上的RE,它表示语言{a}\{a\}
  4. 如果r和s分别是∑上表示语言R和S的RE,则:
    • r与s的“和” (r+s)是Σ\Sigma上的RE,(r+s)表达的语言为R∪S;
    • r与s的“乘积” (rs)是Σ\Sigma上的RE,(rs)表达的语言为RS;
    • r的克林闭包(r*)是Σ\Sigma上的RE,(r*)表达的语言为R*。
  5. 只有满足1、2、3、4的才是Σ\Sigma上的RE。

表示

  • 0,表示语言{0}
  • 1,表示语言{1}
  • (0+1),表示语言{0,1}
  • (01),表示语言{01}
  • ((0+1)*),表示语言{0,1}*

运算

  • 结合律:
    (rs)t=r(st)(rs)t=r(st)
    (r+s)+t=r+(s+t)(r+s)+t=r+(s+t)
  • 分配律:
    r(s+t)=rs+rtr(s+t)=rs+rt
    (s+t)r=sr+tr(s+t)r=sr+tr
  • 交换律:
    r+s=s+rr+s=s+r
  • 幂等律:
    r+r=rr+r=r
  • 加法运算零元素:
    r+Φ=rr+Φ=r
  • 乘法运算单位元:
    rε=εr=rrε=εr=r
  • 乘法运算零元素:
    rΦ=Φr=ΦrΦ=Φr=Φ
  • L(Φ)=ΦL(Φ)=Φ
  • L(ε)={ε}L(ε)=\{ε\}
  • L(a)={a}L(a)=\{a\}
  • L(rs)=L(r)L(s)L(rs)=L(r)L(s)
  • L(r+s)=L(r)L(s)L(r+s)=L(r)∪L(s)
  • $L(r*)=(L®)^* $
  • L(Φ)={ε}L(Φ^*)=\{ε\}
  • L((r+ε))=L(r)L((r+ε)^*)=L(r^*)
  • L((r))=L(r)L((r^*)^*)=L(r^*)
  • L((rs))=L((r+s))L((r^*s^*)^*)=L((r+s)^*)
  • 如果L(r)L(s)L(r) \subseteq L(s),则r+s=sr+s=s
  • $L(rn)=(L®)^n $
  • rnrm=rn+mr^n r^m=r^{n+m}
    一般地,r+εr,(rs)nrnsn,rssrr+ε≠r,(rs)^n ≠r^ns^n,rs≠sr

  • r0=εr^0=ε
    rn=rn1rr^n=r^{n-1}r