计算理论 (二):下推自动机与上下文无关文法
上下文无关文法
定义见上一篇的语言和文法部分。简称上下文无关文法为 \(\text{CFG(context-free grammar)}\),下文无关语言为 \(\text{CFL(contex-free language)}\)。
为了简便可以把几个左边相同的产生式
合写为
上下文无关文法有天生的递归特性,比如一个简单的例子 \(G=(V,\Sigma,R,S)\),其中 \(V=\{S\}\),\(\Sigma=\{(,)\}\),\(R\) 为
可以看到它生成的语言是所有的合法括号序列。
下面我们说明上下文无关文法的一种简洁规范的形式:乔姆斯基范式。
称一个上下文无关文法为 「乔姆斯基范式 \(\text{(Chomsky normal form)}\)」,如果它的每一个产生式有如下形式:
其中 \(a\) 是任意的终结符,\(A,B,C\) 是任意的变元,且 \(B,C\) 不为起始变元。此外,允许规则 \(S\rightarrow\varepsilon\),其中 \(S\) 是起始变元。
任一上下文无关语言都可以用一个乔姆斯基范式产生。证明就考虑如何将一个上下文无关语言转化为乔姆斯基范式。
由于产生右边的 \(B,C\) 不能是起始变元,添加一个新的起始变元 \(S_0\) 及规则 \(S_0\rightarrow S\)。
由于除了起始变元不能存在产生式 \(A\rightarrow\varepsilon\),我们对每个 \(A\rightarrow\varepsilon\),首先删除它,然后对于所有右边有 \(A\) 出现的产生式 \(R\rightarrow u_1Au_2A\cdots Au_{n+1}\),添加 \(2^{n}-1\) 个规则来枚举所有可能变成空串的 \(A\)。比如对于 \(R\rightarrow uAvAw\),添加 \(R\rightarrow uAvw,R\rightarrow uvAw,R\rightarrow uvw\)。如果有产生式 \(R\rightarrow A\),则添加 \(R\rightarrow\varepsilon\),除非之前已经删除过 \(R\rightarrow\varepsilon\)。重复进行上述步骤直到不存在形如 \(A\rightarrow\epsilon\) 的产生式。
由于产生式右边有两个变元,我们对每个 \(A\rightarrow B\) 的单变元产生式,首先删除它,然后对于所有的 \(B\rightarrow u\),其中 \(u\) 是变元和终结符组成的字符串,添加产生式 \(A\rightarrow u\),除非之前已经删除过 \(A\rightarrow u\)。重复进行上述步骤直到不存在形如 \(A\rightarrow B\) 的产生式。
最后留下来的产生式全部是形如 \(A\rightarrow u\) 的形式,其中 \(u\) 是变元和终结符组成的非空字符串。设 \(u=u_1u_2\cdots u_k\),对于一个 \(A\rightarrow u\),将它替换为一次只叠加一个字符的 \(k-1\) 个产生式 \(A\rightarrow u_1A_1,A_1\rightarrow u_2A_2,\cdots,A_{k-2}\rightarrow u_{k-1}u_k\),其中 \(u_i\) 是一个变元或终结符,\(A_i\) 是新建的变元,如果 \(u_i\) 是变元那么保留它,否则新建一个变元 \(U_i\) 替换它并添加产生式 \(U_i\rightarrow u_i\)。
下推自动机
下面我们将介绍一个比有穷状态机更强大的计算模型 下推自动机 \(\text{(pushdown automata,PDA)}\),以及与有穷自动机和正则文法相似的,它与上下文无关文法的等价性。

浙公网安备 33010602011771号