Yin的笔记本

vuePress-theme-reco Howard Yin    2021 - 2025
Yin的笔记本 Yin的笔记本

Choose mode

  • dark
  • auto
  • light
Home
Category
  • CNCF
  • Docker
  • namespaces
  • Kubernetes
  • Kubernetes对象
  • MyIdeas
  • Linux
  • Revolution
  • WebRTC
  • 云计算
  • 人工智能
  • 分布式
  • 图像处理
  • 图形学
  • 微服务
  • 数学
  • OJ笔记
  • 博弈论
  • 形式语言与自动机
  • 数据库
  • 服务器运维
  • 编程语言
  • C
  • Git
  • Go
  • Java
  • Node
  • Nvidia
  • Python
  • Rust
  • Tex
  • Shell
  • Vue
  • 视频编解码
  • 计算机网络
  • SDN
  • 论文笔记
  • 讨论
  • 边缘计算
  • 量子信息技术
Tag
TimeLine
About
查看源码
author-avatar

Howard Yin

299

Article

152

Tag

Home
Category
  • CNCF
  • Docker
  • namespaces
  • Kubernetes
  • Kubernetes对象
  • MyIdeas
  • Linux
  • Revolution
  • WebRTC
  • 云计算
  • 人工智能
  • 分布式
  • 图像处理
  • 图形学
  • 微服务
  • 数学
  • OJ笔记
  • 博弈论
  • 形式语言与自动机
  • 数据库
  • 服务器运维
  • 编程语言
  • C
  • Git
  • Go
  • Java
  • Node
  • Nvidia
  • Python
  • Rust
  • Tex
  • Shell
  • Vue
  • 视频编解码
  • 计算机网络
  • SDN
  • 论文笔记
  • 讨论
  • 边缘计算
  • 量子信息技术
Tag
TimeLine
About
查看源码
  • 上下文无关文法和上下文无关语言

    • 上下文无关文法(CFG, Context-Free Grammar)
      • 规约(由字符串到CFG)和派生(由CFG到字符串)
        • “可派生”和“可规约”符号⇒G\mathop{\Rightarrow}\limits_{G}G⇒​定义
        • “mmm步派生”符号⇒Gm\mathop{\Rightarrow}\limits_{G}^mG⇒m​定义
        • “多步派生”符号⇒G∗\mathop{\Rightarrow}\limits_{G}^*G⇒∗​定义
        • “最左派生”符号⇒lm\mathop{\Rightarrow}\limits_{lm}lm⇒​定义
        • “最右派生”符号⇒rm\mathop{\Rightarrow}\limits_{rm}rm⇒​定义
        • 案例:回文语言L={w∈{0,1}∗∣w=wR}L=\{w\in\{0,1\}^*|w=w^R\}L={w∈{0,1}∗∣w=wR}的CFG
      • 上下文无关语言(CFL, Context-Free Language):上下文无关文法的语言
        • 上下文无关语言的封闭性
          • 代换
          • 代换的封闭性(未完成)
        • 案例
          • 案例:语言L=∑n=0∞0n1n={0n1n∣n≥0}L=\sum_{n=0}^\infty\bm 0^n\bm 1^n=\{0^n1^n|n\geq 0\}L=∑n=0∞​0n1n={0n1n∣n≥0}的CFG
          • 案例:语言L={w∣w由数量相等的01构成}L=\{w|w\text{由数量相等的01构成}\}L={w∣w由数量相等的01构成}的CFG
          • 案例:语言L={0i1j∣i>j}L=\{0^i1^j|i>j\}L={0i1j∣i>j}的CFG
          • 经典案例:四则运算表达式的CFG
        • 乔姆斯基范式(Chomsky Normal Form, CNF)
          • 乔姆斯基范式的性质
        • 格雷巴赫范式(Greibach Normal Form, GNF)
          • 乔姆斯基范式的性质
        • 上下文无关语言的泵引理
          • 非上下文无关语言

          上下文无关文法和上下文无关语言

          vuePress-theme-reco Howard Yin    2021 - 2025

          上下文无关文法和上下文无关语言


          Howard Yin 2021-03-03 12:10:02 数学形式语言与自动机形式语言计算理论上下文无关语言上下文无关文法下推自动机

          # 上下文无关文法(CFG, Context-Free Grammar)

          CFG为一个四元组:

          G=(V,T,P,S)G=(V,T,P,S) G=(V,T,P,S)

          • VVV:非终结符(变量、语法范畴)的有穷集
          • TTT:终结符的有穷集
            • 终结符和非终结符不能有重复V∩T=∅V\cap T=\emptysetV∩T=∅
          • PPP:产生式的有穷集,产生式可以表示为A→αA\rightarrow\alphaA→α,读作“AAA定义为α\alphaα”,其中
            • AAA:产生式的头/左部,A∈VA\in VA∈V
            • →\rightarrow→:产生式符号,表示“定义为”
            • α\alphaα:产生式的体/右部,α∈(V∪T)∗\alpha\in (V\cup T)^*α∈(V∪T)∗是一个字符串
          • SSS:初始符号,S∈VS\in VS∈V

          注:

          • 多条产生式A→α1,A→α2,A→α3,…A\rightarrow\alpha_1,A\rightarrow\alpha_2,A\rightarrow\alpha_3,\dotsA→α1​,A→α2​,A→α3​,…合写为A→α1∣α2∣α3∣…A\rightarrow\alpha_1|\alpha_2|\alpha_3|\dotsA→α1​∣α2​∣α3​∣…
          • 变元AAA的全体产生式称为AAA产生式

          # 规约(由字符串到CFG)和派生(由CFG到字符串)

          对于一个CFGG=(V,T,P,S)G=(V,T,P,S)G=(V,T,P,S),字符串α,β,γ∈(V∪T)∗\alpha,\beta,\gamma\in(V\cup T)^*α,β,γ∈(V∪T)∗

          # “可派生”和“可规约”符号⇒G\mathop{\Rightarrow}\limits_{G}G⇒​定义

          用A→γA\rightarrow\gammaA→γ的右部替换αAβ\alpha A\betaαAβ中的变元AAA得到αγβ\alpha\gamma\betaαγβ

          αAβ⇒Gαγβ:=αAβ可派生出αγβαγβ可规约为αAβ:=(∃A∈V)A→γ∈P\alpha A\beta\mathop{\Rightarrow}\limits_{G}\alpha\gamma\beta\quad:=\quad \begin{aligned} \alpha A\beta\text{可派生出}\alpha\gamma\beta\\ \alpha\gamma\beta\text{可规约为}\alpha A\beta\\ \end{aligned} \quad:=\quad (\exist A\in V)A\rightarrow\gamma\in P αAβG⇒​αγβ:=αAβ可派生出αγβαγβ可规约为αAβ​:=(∃A∈V)A→γ∈P

          # “mmm步派生”符号⇒Gm\mathop{\Rightarrow}\limits_{G}^mG⇒m​定义

          α\alphaα经过mmm次派生过程可以得到β\betaβ

          α⇒Gmβ:=(∃α1,…αm∈(V∪T)∗,αi⇒Gαi+1)α=α1,β=αm\alpha\mathop{\Rightarrow}\limits_{G}^m\beta\quad:=\quad(\exist\alpha_1,\dots\alpha_m\in(V\cup T)^*,\alpha_i\mathop{\Rightarrow}\limits_{G}\alpha_{i+1})\alpha=\alpha_1,\beta=\alpha_m αG⇒m​β:=(∃α1​,…αm​∈(V∪T)∗,αi​G⇒​αi+1​)α=α1​,β=αm​

          # “多步派生”符号⇒G∗\mathop{\Rightarrow}\limits_{G}^*G⇒∗​定义

          α\alphaα经过多次派生过程可以得到β\betaβ

          α⇒G∗β:=(∃m∈N+)α⇒Gmβ\alpha\mathop{\Rightarrow}\limits_{G}^*\beta\quad:=\quad(\exist m\in\mathbb N_+)\alpha\mathop{\Rightarrow}\limits_{G}^m\beta αG⇒∗​β:=(∃m∈N+​)αG⇒m​β

          若语境中GGG已知,则GGG可省略。⇒G\mathop{\Rightarrow}\limits_{G}G⇒​、⇒Gm\mathop{\Rightarrow}\limits_{G}^mG⇒m​、⇒G∗\mathop{\Rightarrow}\limits_{G}^*G⇒∗​可分别省略为⇒\mathop{\Rightarrow}\limits⇒、⇒m\mathop{\Rightarrow}\limits^m⇒m、⇒∗\mathop{\Rightarrow}\limits^*⇒∗。

          # “最左派生”符号⇒lm\mathop{\Rightarrow}\limits_{lm}lm⇒​定义

          只替换字符串最左边的变元

          αAβ⇒lmαγβ:=αAβ⇒αγβ∧α中没有变元\alpha A\beta\mathop{\Rightarrow}\limits_{lm}\limits\alpha\gamma\beta\quad:=\quad\alpha A\beta\mathop{\Rightarrow}\limits\alpha\gamma\beta\wedge\alpha\text{中没有变元} αAβlm⇒​αγβ:=αAβ⇒αγβ∧α中没有变元

          同理可定义“mmm步最左派生”⇒lmm\mathop{\Rightarrow}\limits_{lm}^mlm⇒m​和“多步最左派生”⇒lm∗\mathop{\Rightarrow}\limits_{lm}^*lm⇒∗​。

          # “最右派生”符号⇒rm\mathop{\Rightarrow}\limits_{rm}rm⇒​定义

          只替换字符串最右边的变元

          αAβ⇒lmαγβ:=αAβ⇒αγβ∧β中没有变元\alpha A\beta\mathop{\Rightarrow}\limits_{lm}\limits\alpha\gamma\beta\quad:=\quad\alpha A\beta\mathop{\Rightarrow}\limits\alpha\gamma\beta\wedge\beta\text{中没有变元} αAβlm⇒​αγβ:=αAβ⇒αγβ∧β中没有变元

          同理可定义“mmm步最右派生”⇒rmm\mathop{\Rightarrow}\limits_{rm}^mrm⇒m​和“多步最右派生”⇒rm∗\mathop{\Rightarrow}\limits_{rm}^*rm⇒∗​。

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

          A⇒∗w⇔A⇒lm∗w⇔A⇒rm∗wA\mathop{\Rightarrow}\limits^*w\Leftrightarrow A\mathop{\Rightarrow}\limits_{lm}^*w\Leftrightarrow A\mathop{\Rightarrow}\limits_{rm}^*w A⇒∗w⇔Alm⇒∗​w⇔Arm⇒∗​w

          # 案例:回文语言L={w∈{0,1}∗∣w=wR}L=\{w\in\{0,1\}^*|w=w^R\}L={w∈{0,1}∗∣w=wR}的CFG

          G=({A},{0,1},{A→ε∣0∣1∣0A0∣1A1},A)G=(\{A\},\{0,1\},\{A\rightarrow\varepsilon|0|1|0A0|1A1\},A) G=({A},{0,1},{A→ε∣0∣1∣0A0∣1A1},A)

          例如,一个回文串派生过程A⇒70101001001010A\mathop{\Rightarrow}\limits^70101001001010A⇒70101001001010可以表示如下:

          A⇓使用产生式A→0A00A0⇓使用产生式A→1A101A10⇓使用产生式A→0A0010A010⇓使用产生式A→1A10101A1010⇓使用产生式A→0A001010A01010⇓使用产生式A→0A0010100A001010⇓使用产生式A→10101001001010\begin{aligned} &A\\ &\Downarrow\text{使用产生式}A\rightarrow 0A0\\ 0&A0\\ &\Downarrow\text{使用产生式}A\rightarrow 1A1\\ 01&A10\\ &\Downarrow\text{使用产生式}A\rightarrow 0A0\\ 010&A010\\ &\Downarrow\text{使用产生式}A\rightarrow 1A1\\ 0101&A1010\\ &\Downarrow\text{使用产生式}A\rightarrow 0A0\\ 01010&A01010\\ &\Downarrow\text{使用产生式}A\rightarrow 0A0\\ 010100&A001010\\ &\Downarrow\text{使用产生式}A\rightarrow 1\\ 010100&1001010\\ \end{aligned} 001010010101010010100010100​A⇓使用产生式A→0A0A0⇓使用产生式A→1A1A10⇓使用产生式A→0A0A010⇓使用产生式A→1A1A1010⇓使用产生式A→0A0A01010⇓使用产生式A→0A0A001010⇓使用产生式A→11001010​

          # 上下文无关语言(CFL, Context-Free Language):上下文无关文法的语言

          CFGG=(V,T,P,S)G=(V,T,P,S)G=(V,T,P,S)的语言定义为:由初始符号派生的所有仅由终结符构成字符串的集合

          L(G)={w∣w∈T∗,S⇒G∗w}\bm L(G)=\{w|w\in T^*,S\mathop{\Rightarrow}\limits_{G}^*w\} L(G)={w∣w∈T∗,SG⇒∗​w}

          在上下文无关文法派生的每一步αAβ⇒Gαγβ\alpha A\beta\mathop{\Rightarrow}\limits_{G}\alpha\gamma\betaαAβG⇒​αγβ,γ\gammaγ都只与AAA有关而与α\alphaα和β\betaβ无关,因此称为“上下文无关”语言。

          α是G的句型:=α∈(V∪T)∗∧S⇒∗αα是G的左句型:=α∈(V∪T)∗∧S⇒lm∗αα是G的右句型:=α∈(V∪T)∗∧S⇒rm∗αα是G的句子:=α∈T∗∧S⇒∗α\begin{aligned} \alpha\text{是}G\text{的句型}&:=&\alpha\in(V\cup T)^*\wedge S\mathop{\Rightarrow}\limits^*\alpha&\\ \alpha\text{是}G\text{的左句型}&:=&\alpha\in(V\cup T)^*\wedge S\mathop{\Rightarrow}\limits_{lm}^*\alpha&\\ \alpha\text{是}G\text{的右句型}&:=&\alpha\in(V\cup T)^*\wedge S\mathop{\Rightarrow}\limits_{rm}^*\alpha&\\ \alpha\text{是}G\text{的句子}&:=&\alpha\in T^*\wedge S\mathop{\Rightarrow}\limits^*\alpha&\\ \end{aligned} α是G的句型α是G的左句型α是G的右句型α是G的句子​:=:=:=:=​α∈(V∪T)∗∧S⇒∗αα∈(V∪T)∗∧Slm⇒∗​αα∈(V∪T)∗∧Srm⇒∗​αα∈T∗∧S⇒∗α​​

          以下3个案例来自于《正则语言》一节,它们都不是正则语言,但是是上下文无关语言。

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

          # 代换

          代换是一个字母表Σ\SigmaΣ上的字符串到另一个字母表Γ\GammaΓ上的语言Γ∗\Gamma^*Γ∗的函数s:Σ∗→2Γ∗s:\Sigma^*\rightarrow 2^{\Gamma^*}s:Σ∗→2Γ∗。递归定义:

          s(ε)={ε}空串的代换s(a)=La(a∈Σ,La∈2Γ∗)字符的代换s(xa)=s(x)s(a)(x∈Σ∗)字符串的代换s(L)=⋃x∈Ls(x)语言的代换\begin{aligned} s(\varepsilon)&=\{\varepsilon\}&& &\text{空串的代换}&\\ s(a)&=L_a&&(a\in\Sigma,L_a\in 2^{\Gamma^*})&\text{字符的代换}&\\ s(xa)&=s(x)s(a)&&(x\in\Sigma^*)&\text{字符串的代换}&\\ s(L)&=\bigcup_{x\in L}s(x)&& &\text{语言的代换} \end{aligned} s(ε)s(a)s(xa)s(L)​={ε}=La​=s(x)s(a)=x∈L⋃​s(x)​​(a∈Σ,La​∈2Γ∗)(x∈Σ∗)​空串的代换字符的代换字符串的代换语言的代换​​

          # 代换的封闭性(未完成)

          对于字母表Σ\SigmaΣ上的一个CFLL∈Σ∗L\in\Sigma^*L∈Σ∗,那么对于代换sss有如下定理:

          (∀a∈Σ)s(a)是CFL⇒s(L)是CFL(\forall a\in\Sigma)s(a)\text{是CFL}\Rightarrow s(L)\text{是CFL} (∀a∈Σ)s(a)是CFL⇒s(L)是CFL

          证明:

          设:

          • CFLLLL的CFG是G=(V,T,P,S)G=(V,T,P,S)G=(V,T,P,S),即L=L(G)L=\bm L(G)L=L(G);
          • s(a)s(a)s(a)的CFG是Ga=(Va,Ta,Pa,Sa)G_a=(V_a,T_a,P_a,S_a)Ga​=(Va​,Ta​,Pa​,Sa​),即s(a)=L(Ga)s(a)=\bm L(G_a)s(a)=L(Ga​)。

          那么构造一个CFGG′G'G′:

          G′=(V′,T′,P′,S)G'=(V',T',P',S) G′=(V′,T′,P′,S)

          其中:

          • V′=V∪(⋃a∈TVa)V'=V\cup(\bigcup_{a\in T}V_a)V′=V∪(⋃a∈T​Va​),变元是原CFL和所有代换CFL的变元并集
          • T′=⋃a∈TTaT'=\bigcup_{a\in T}T_aT′=⋃a∈T​Ta​,终结符中只包含代换CFL的终结符,不包含原CFL的终结符
          • P′P'P′中包含⋃a∈TPa\bigcup_{a\in T}P_a⋃a∈T​Pa​和PPP,但要将PPP中产生式的每个终结符aaa替换为对应的代换文法GaG_aGa​的开始符号SaS_aSa​。

          # 案例

          # 案例:语言L=∑n=0∞0n1n={0n1n∣n≥0}L=\sum_{n=0}^\infty\bm 0^n\bm 1^n=\{0^n1^n|n\geq 0\}L=∑n=0∞​0n1n={0n1n∣n≥0}的CFG

          G=({S},{0,1},{S→ε∣0S1},S)G=(\{S\},\{0,1\},\{S\rightarrow\varepsilon|0S1\},S) G=({S},{0,1},{S→ε∣0S1},S)

          # 案例:语言L={w∣w由数量相等的01构成}L=\{w|w\text{由数量相等的01构成}\}L={w∣w由数量相等的01构成}的CFG

          G=({S},{0,1},{S→ε∣S0S1S∣S1S0S},S)G=(\{S\},\{0,1\},\{S\rightarrow\varepsilon|S0S1S|S1S0S\},S) G=({S},{0,1},{S→ε∣S0S1S∣S1S0S},S)

          # 案例:语言L={0i1j∣i>j}L=\{0^i1^j|i>j\}L={0i1j∣i>j}的CFG

          G=({S,A,B},{0,1},{S→AB,A→A0∣0,B→ε∣0B1},S)G=(\{S,A,B\},\{0,1\},\{S\rightarrow AB,A\rightarrow A0|0,B\rightarrow\varepsilon|0B1\},S) G=({S,A,B},{0,1},{S→AB,A→A0∣0,B→ε∣0B1},S)

          # 经典案例:四则运算表达式的CFG

          表示一个由加减乘除和括号以及二进制数表示的四则运算CFG

          G={{E,I},{0,1,+,−,×,÷,(,)},P,E}G=\{\{E,I\},\{0,1,+,-,\times,\div,(,)\},P,E\} G={{E,I},{0,1,+,−,×,÷,(,)},P,E}

          其中,产生式的有穷集PPP为:

          P={E→E+E∣E−EE→E×E∣E÷EE→(E)∣II→0∣1∣I0∣I1}P=\left\{ \begin{aligned} E&\rightarrow E+E|E-E\\ E&\rightarrow E\times E|E\div E\\ E&\rightarrow (E)|I\\ I&\rightarrow 0|1|I0|I1\\ \end{aligned} \right\} P=⎩⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎧​EEEI​→E+E∣E−E→E×E∣E÷E→(E)∣I→0∣1∣I0∣I1​⎭⎪⎪⎪⎪⎪⎬⎪⎪⎪⎪⎪⎫​

          # 乔姆斯基范式(Chomsky Normal Form, CNF)

          如果一个上下文无关文法G=(V,T,P,S)G=(V,T,P,S)G=(V,T,P,S)的每一个产生式都具有如下形式:

          A→BC(A,B,C∈V∧B,C≠S)A→a(A∈V∧a∈T)\begin{aligned} A&\rightarrow BC&&(A,B,C\in V\wedge B,C\not =S)&\\ A&\rightarrow a&&(A\in V\wedge a\in T)&\\ \end{aligned}AA​→BC→a​​(A,B,C∈V∧B,C​=S)(A∈V∧a∈T)​​

          那么称此上下文无关文法为乔姆斯基范式。

          可以证明任何上下文无关文法都可以转化为乔姆斯基范式,其证明过程也是将任意上下文无关文法转化为乔姆斯基范式的方法,比较简单,此处略。

          # 乔姆斯基范式的性质

          • 派生出长度为nnn的串恰好需要2n−12n-12n−1步
            • 其中n−1n-1n−1步产生一个由变元组成的长度为nnn的串
            • 其中nnn步将长度为nnn的变元串派生为终结符串
          • 存在多项式时间算法判断任意字符串是否在给定的乔姆斯基范式
            • 编译原理中常见的CYK算法即是以CNF为基础

          # 格雷巴赫范式(Greibach Normal Form, GNF)

          如果一个上下文无关文法G=(V,T,P,S)G=(V,T,P,S)G=(V,T,P,S)不含空串ε∉T\varepsilon\not\in Tε​∈T,且每一个产生式都具有如下形式:

          A→aα(a∈T∧α∈(V∪T∪{ε})∗)A\rightarrow a\alpha\quad(a\in T\wedge\alpha\in(V\cup T\cup\{\varepsilon\})^*)\\ A→aα(a∈T∧α∈(V∪T∪{ε})∗)

          那么称此上下文无关文法为格雷巴赫范式。

          可以证明任何不含空串ε∉T\varepsilon\not\in Tε​∈T的上下文无关文法都可以转化为格雷巴赫范式,其证明过程也是将任意上下文无关文法转化为格雷巴赫范式的方法,比较简单,此处略。

          # 乔姆斯基范式的性质

          • 派生出长度为nnn的串恰好需要nnn步
          • 每个产生式引入一个终结符

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

          # 非上下文无关语言

          “上下文有关语言”

          帮助我们改善此页面!
          创建于: 2020-11-15 09:31:56

          更新于: 2021-03-03 12:10:27