“上下文无关语言的闭包与这里有一个具体分界:两个 CFL 的交可以是非 CFL,例如分别要求 $a,b$ 等长与 $b,c$ 等长的两种语言,其交为 ${a^nb^nc^n:n\ge0}$。正…”
形式陈述
由上下文无关文法生成的语言简称 CFL。以下闭包陈述使用语言运算:输入语言属于指定类别时,运算结果仍属 CFL。CFL 对有限并、连接、Kleene 星、反转、同态、逆同态以及与正则语言求交封闭。补集相对于固定字母表的
直觉
闭包问题问的是:把两个语言经过某种运算组合后,是否仍能由同一类机器描述。对上下文无关语言,答案呈现鲜明的不对称:一只栈能在多个语法之间选择、顺序拼接或重复,所以并、连接与 Kleene 星号可以通过局部拼接文法实现;交可能要求同一输入同时满足两套栈约束,而一只栈未必能同时保留两套信息。补的困难则在于非确定接受是“存在成功分支”:把每条分支的成功与失败互换,不会把存在量词变成“所有分支失败”。有限自动机只增加有限控制,因此 CFL 与正则语言求交仍可由一只栈完成。理解这种能力差异,比单纯背诵闭包表更重要。
例子与边界
令
若
有限并的构造也能直接写出:先把两套文法的非终结符重命名为互不相交,再用新的开始符号增加
交不封闭还推出补不封闭:若上下文无关语言对补封闭,那么利用其对并封闭和 De Morgan 律,就会得到对交封闭,与上述反例矛盾。差也不封闭,否则取
推论与应用
这些闭包性质让 语言运算 成为构造新 上下文无关文法 的模块化工具,决定哪些组合与语法过滤能在解析器生成器中安全实现,也能服务于非上下文无关性的归约证明:先假设目标语言属于该类,再与精心选择的正则语言相交,把问题化到已知反例。与 正则语言闭包性质 对照,还能看出有限状态模型和栈模型在布尔运算上的本质差别。
参考资料
- John E. Hopcroft, Rajeev Motwani, and Jeffrey D. Ullman, Introduction to Automata Theory, Languages, and Computation, 3rd ed., Pearson, 2006,Chs. 5–7。
- Michael Sipser, Introduction to the Theory of Computation, 3rd ed., Cengage, 2013,Ch. 2。
- OpenDSA Project Contributors, Formal Languages With Visualizations: Properties of Context-Free Languages, 2019,§8.1.1.1,文法组合与不封闭反例。