[HIT-FLAA]哈工大2020春形式语言与自动机复习笔记 (3)

本系列文章

1. 上下文无关文法(CFG)

1. 形式化定义

上下文无关文法 (Context-Free Grammars):CFG是一个四元组,如: G = ( V , T , S , P ) G=(V,T,S,P) G=(V,T,S,P),其中

  • V V V:变元的集合,是一个有限集;(变量)
  • T T T:终结符的集合,是一个有限集,且 V ∩ T = ϕ V \cap T = \phi VT=ϕ;(值)
  • S S S:开始变元, S ∈ V S \in V SV
  • P P P:产生式的集合,是一个有穷集,其中的每个元素都有形式: A → α A \rightarrow \alpha Aα,其中 A ∈ V , α ∈ ( V ∪ T ) ∗ A \in V, \alpha \in (V \cup T)^* AV,α(VT)

派生:由产生式生成字符串的过程。

  • 最左派生:每次选取派生式的最左的变元派生替换。

  • 最右派生:每次选取派生式的最右变元派生替换。

例如: L = { a 2 n b m ∣ n ≥ 0 , m ≥ 0 } L=\{a^{2n}b^m | n \ge 0, m \ge 0 \} L={ a2nbmn0,m0} 的产生式为: S → A B ,   A → ε ∣ a a A ,   B → ε ∣ B b S\rightarrow AB,\, A\rightarrow \varepsilon | aaA,\, B\rightarrow \varepsilon | Bb SAB,AεaaA,BεBb

对于字符串 w = a a b b w=aabb w=aabb 来说,派生式如下:

S ⇒ A B ⇒ a a A B ⇒ a a A B b ⇒ a a B b ⇒ a a B b b ⇒ a a b b S\Rightarrow AB \Rightarrow aaAB \Rightarrow aaABb \Rightarrow aaBb \Rightarrow aaBbb \Rightarrow aabb SABaaABaaABbaaBbaaBbbaabb

  • 最左派生: S ⇒ A B ⇒ a a A B ⇒ a a B ⇒ a a B b ⇒ a a B b b ⇒ a a b b S\Rightarrow AB\Rightarrow aaAB\Rightarrow aaB\Rightarrow aaBb\Rightarrow aaBbb \Rightarrow aabb SABaaABaaBaaBbaaBbbaabb

  • 最右派生: S ⇒ A B ⇒ A B b ⇒ A B b b ⇒ A b b ⇒ a a A b b ⇒ a a b b S\Rightarrow AB\Rightarrow ABb\Rightarrow ABbb\Rightarrow Abb\Rightarrow aaAbb\Rightarrow aabb SABABbABbbAbbaaAbbaabb

上下文无关语言 (CFL) G = ( V , T , S , P ) G=(V,T,S,P) G=(V,T,S,P) 是一个CFG,则 L ( G ) = { w    ∣    w ∈ T ∗    a n d    S ⟹ ∗ w } L(G)=\{w\;|\;w\in T^*\; and\; S \stackrel{*}{\Longrightarrow} w\} L(G)={ wwTandSw}

2. 语法分析树

语法分析树 G = ( V , T , S , P ) G=(V,T,S,P) G=(V,T,S,P) 是一个CFG,一个G的语法分析树如下:

  • 每个内节点都标了一个 V V V 中的变元;
  • 每个叶节点都标了一个 T ∪ { ε } T\cup \{\varepsilon\} T{ ε} 中的符号,所有被 ε 标记的叶节点都是其父节点的唯一子节点;
  • 如果一个内节点标记为A,它的子节点(从左到右)标记为 x 1 , x 2 , … , x k x_1,x_2, …, x_k x1,x2,,xk,则 A → x 1 , x 2 , … , x k ∈ P A\rightarrow x_1,x_2, …, x_k \in P Ax1,x2,,xkP

例: L = { w    ∣    w ∈ { 0 , 1 } ∗    a n d    w = w R } L=\{ w\; |\; w\in \{0,1\}^*\; and\; w = w^R \} L={ ww{ 0,1}andw=wR} 产生式为 S → ε   ∣   0   ∣   1   ∣   0 S 0   ∣   1 S 1 S \rightarrow \varepsilon\, |\, 0\, |\, 1\, |\, 0S0\, |\, 1S1 Sε010S01S1 两个语法分析树如下:
在这里插入图片描述

3. 二义性

对于一个CFG: G = ( { E , I } , { a , b , ( , ) , + , ∗ } , E , P ) G=(\{E,I\}, \{a, b, (, ), +, *\}, E, P) G=({ E,I},{ a,b,(,),+,},E,P),产生式为 E → I    ∣    E + E ∣    E ∗ E    ∣    ( E ) , I → a    ∣    b E\rightarrow I\; |\; E+E |\;E*E\;|\;(E), I\rightarrow a\;|\;b EIE+EEE(E),Iab

对于字符串 w = a + a ∗ a w=a+a*a w=a+aa 的两种最左派生如下:

E ⇒ E ∗ E ⇒ E + E ∗ E ⇒ I + E ∗ E ⇒ a + E ∗ E ⇒ a + a ∗ a E ⇒ E + E ⇒ I + E ⇒ a + E ⇒ a + E ∗ E ⇒ a + a ∗ a E\Rightarrow E*E\Rightarrow E+E*E\Rightarrow I+E*E\Rightarrow a+E*E\Rightarrow a+a*a\\ E\Rightarrow E+E\Rightarrow I+E\Rightarrow a+E\Rightarrow a+E*E\Rightarrow a+a*a EEEE+EEI+EEa+EEa+aaEE+EI+Ea+Ea+EEa+aa

对应的语法分析树如下,发现一个先算的是加法,一个先算的是乘法,出现了歧义。
在这里插入图片描述

重新构造产生式以消除歧义:

先算乘法的: E → I    ∣    E + E    ∣    E ∗ E    ∣    ( E ) ,    I → a    ∣    b E\rightarrow I\; |\; E+E\; |\; E*E\; |\; (E),\; I\rightarrow a\; |\; b EIE+EEE(E),Iab

先算加法的: E → T    ∣    E + T ,    T → F    ∣    T ∗ F ,    F → I    ∣    ( E ) ,    I → a    ∣    b    ∣    I a    ∣    I b E\rightarrow T\; |\; E+T,\; T\rightarrow F\; |\; T*F,\; F\rightarrow I\; |\;(E),\; I\rightarrow a\;|\;b\;|\;Ia\;|\;Ib ETE+T,TFTF,FI(E),IabIaIb

定义同样的语言可以有多个文法,如果一个CFL的所有文法都是歧义的,那么它是固有二义性的

4. CFG的化简

  • 去掉 ε 产生式;
  • 去掉单元产生式;
  • 去掉无用的产生式;

5. 乔姆斯基范式(CNF)

乔姆斯基范式(Chomsky Normal Form):一个CFG的所有的产生式都有如下两种形式之一:

  • A → B C A\rightarrow BC ABC A , B , C ∈ V A,B,C\in V A,B,CV
  • A → a A\rightarrow a Aa a ∈ T a\in T aT

CFG可以转换为CNF的形式,如下例子。

:将 S → A B a , A → a a b , B → A c S\rightarrow ABa , A\rightarrow aab , B \rightarrow Ac SABa,Aaab,BAc 转化为CNF的形式

S → A C , A → D E , B → A F , C → B D , D → a , F → c , E → D G , G → b S\rightarrow AC,A\rightarrow DE,B\rightarrow AF,C\rightarrow BD,D\rightarrow a,F\rightarrow c,E\rightarrow DG,G\rightarrow b SAC,ADE,BAF,CBD,Da,Fc,EDG,Gb

2. 下推自动机(PDA)

由于FA有局限性,可以识别 M = { 0 n 1 m ∣ n ≥ 0 , m ≥ 0 } M=\{0^n1^m | n \ge 0, m \ge 0 \} M={ 0n1mn0,m0},但不能识别 L = { 0 n 1 n ∣ n ≥ 0 } L=\{ 0^n1^n | n \ge 0 \} L={ 0n1nn0},所以有了PDA

1. 形式化定义

下推自动机(Pushdown Automata):PDA是一个七元组 P = ( Q ,   Σ ,   Γ ,   δ ,   q 0 ,   z 0 ,   F ) P=(Q,\,\Sigma,\,\Gamma,\,\delta,\,q_0,\,z_0,\,F) P=(Q,Σ,Γ,δ,q0,z0,F),其中,

  • Q Q Q 是有限的状态集;
  • Σ \Sigma Σ 是有限的输入字符集;
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值