上下文无关语言

返回“计算理论”

定义:上下文无关文法G是一个四元组\((V, \Sigma, R, S)\),其中

对任意的\(A\in V-\Sigma\)\(u\in V^*\),当\((A,u)\in R\)时记作\(A\rightarrow_Gu\)。对任意字符串\(u,v\in V^*\),记\(u\Rightarrow_Gv\)当且仅当存在字符串\(x,y\in V^*\)\(A\in V-\Sigma\)使得\(u=xAy\)\(v=xv'y\)\(A\rightarrow_Gv'\)。关系\(\Rightarrow_G\)是的自反传递闭包。

G生成的语言\(L(G)\)\(\lbrace \omega\in\Sigma^*:S\stackrel{*}{\Rightarrow}_G\omega \rbrace\)

如果\(L=L(G)\),其中G是一个上下文无关文法,则称L是一个上下文无关语言。

形如\(\omega_0\Rightarrow_G\omega_1\Rightarrow_G\omega_2\Rightarrow_G\cdots\Rightarrow_G\omega_n\Rightarrow_G\)的序列称作\(\omega_n\)在G中从\(\omega_0\)开始的推导,这里\(\omega_0,\cdots,\omega_n\)可以是\(V^*\)中的任何字符串,推导的长度n是任何自然数,包括0在内。也说推导有n步。

语法分析树:

\(G=(V,\Sigma,R,S)\)是一个上下文无关文法,\(D=x_1\Rightarrow x_2\Rightarrow\cdots\Rightarrow x_n\)\(D'=x'_1\Rightarrow x'_2\Rightarrow\cdots\Rightarrow x'_n\)是G中的两个推导,其中\(x_i,x'_i\in V^*\)\(i=1,\cdots,n\)\(x_1,x'_1\in V-\Sigma\)\(x_n,x'_n\in \Sigma^*\)。即D和D’都是从单个非终结符到终结符串的推导。如果n>2并且存在k,1<k<n使得:

则称D先于D’,记作\(D\prec D'\)

如果有序对\((D, D')\)属于\(\prec\)的自反对称传递闭包,则称这两个推导D和D’是相似的。

最左推导:在相似性下的等价类,有一个推导在\(\prec\)下是极大的,叫做最左推导。

最右推导:在相似性下的等价类,有一个推导在\(\prec\)下是极小的,叫做最右推导。

定理:设\(G=(V,\Sigma, R, S)\)是一个上下文无关文法,\(A\in V-\Sigma\)\(\omega\in\Sigma^*\),则下述命题是等价的:

  1. \(A\Rightarrow\omega\)
  2. 有一棵根为A、结果为\(\omega\)的语法分析树
  3. 有最左推导
  4. 有最右推导

在上下文无关文法生成的语言中,一个字符串可能有两个不相似的推导,也就是说有两棵不相同的语法分析树,或等价的说有两个不同的最右推导(最左推导)。能有两棵或者以上的不同语法分析树的字符串的文法叫做歧义的。存在具有下述性质的上下文无关语言:生成它的所有上下文无关文法一定是歧义的。这样的语言叫做固有歧义的。

下推自动机是一个六元组\(M=(K,\Sigma,\Gamma,\Delta,s,F)\),其中

\(((p,a,\beta),(q,\gamma))\in \Delta\),则当M处于状态p,栈顶为\(\beta\)时,他可以从输入带读a,在栈顶用\(\gamma\)代替\(\beta\),然后进入状态q,这叫做M的转移。

推入一个符号是把这个符号加到栈顶上;托出一个符号是把这个符号从栈顶移去。

下推自动机的格局是\(K\times\Sigma^*\times\Gamma^*\)的成员。设\((p,x,\alpha)\)\((q,y,\zeta)\)是两个格局,如果存在转移\(((p,a,\beta),(q,\gamma))\in\Delta\)使得\(x=ay\)\(\alpha=\beta\eta\)\(\zeta=\gamma\eta\),其中\(\eta\in\Gamma^*\),则称\((p,x,\alpha)\)一步生成\((q,y,\zeta)\),记作\((p,x,\alpha)\vdash_M(q,y,\zeta)\)。把\(\vdash_M\)的自反传递闭包记作\(\vdash^*_M\)。称M接受字符串\(\omega\in\Sigma^*\)当且仅当对于某个\(p\in F\)\((s,\omega,e)\vdash^*_M(p,e,e)\)M接受的语言是M接受的所有字符串的集合,记作\(L(M)\)

定理:下推自动机接受的语言正好是上下文无关语言。

定理:上下文无关语言在并、连接和Kleene星号下是封闭的。

定理:一个上下文无关语言与一个正则语言的交是一个上下文无关语言。

泵定理:设\(G=(V,\Sigma,R,S)\)是一个上下文无关文法,那么\(L(G)\)中任一长度大于\(\phi(G)^{|V-\Sigma|}\)的字符串w可以写成\(w=uvxyz\)使得v或y不是空串,并且对每一个\(n\ge 0\)\(uv^nxy^nz\in L(G)\)

定理:上下文无关语言在交和补下不是封闭的。

定理:

  1. 有多项式算法,任给一个上下文无关文法,构造一台等价的下推自动机。
  2. 有多项式算法,任给一台下推自动机,构造一个等价的上下文无关文法。
  3. 有多项式算法,任给一台上下文无关文法G和一个字符串x,判断是否\(x\in L(G)\)

确定型上下文无关语言:

定理:确定型上下文无关语言类在补运算下是封闭的。

死结束:

推论:确定型上下文无关语言类是上下文无关语言类的真子集。(就下推自动机而言,非确定性比确定性更有力。)