“Type 2 上下文无关语言:规则形如 $A\to\gamma$,左侧只有一个非终结符,与上下文无关文法及下推自动机对应。”
形式陈述
上下文无关文法(CFG)是形式文法在产生式左侧上的一种限制。它仍写作四元组
其中
文法生成的语言为
“上下文无关”指规则能否应用只取决于被替换的单个非终结符
这里 aaSbb 是合法句型,却不是生成语言中的一个字。
直觉
CFG 用递归替换描述嵌套结构。非终结符像尚未展开的结构类别,产生式给出一种合法展开方式;同一非终结符可在任何上下文中按同样规则展开。它比有限自动机多出的力量来自隐式递归深度,可以生成任意层括号或成对计数。文法是生成语言的规格,不自动规定唯一解析、求值顺序或高效解析算法,这些是额外性质。
例子与边界
文法
生成 aabb。图中的叶子从左到右给出同一结果。任意有限次展开后,中间句型总是 abab 或 aab。反过来,要生成
平衡括号可由
边界语言
歧义不能仅凭“有两种改写顺序”判断。对 ab,但只有一棵树。相反,a+a*a 可把根分成加法或乘法,对应
推论与应用
CFG 与下推自动机由CFG–PDA 等价定理刻画同一语言类。允许产生式读取上下文并保持非收缩,会得到更强的上下文有关语言;两者在Chomsky 层级中的位置与严格分离应由层级页承担,而不是混入 CFG 定义。语法树记录具体推导结构,Chomsky 范式与 CYK 算法提供标准化和判定方法。
编程语言语法、配置文件、自然语言片段和递归数据格式常用 CFG 描述;解析器再把终结符流转换为 AST,并处理优先级与歧义。
从栈机器反向构造文法给出另一种得到规则的方式:状态与栈符号组合成变量,运行的首次弹栈边界决定子推导的分割。完整八变量例子也展示了不生成变量的删除;有递归产生式并不保证存在有限的终结推导。
PEG的有序选择不等于 CFG 的备选产生式。CFG 的 ac 与 abc,规则排列次序无关;把同样外观写成 PEG 的 abc 上却会先让短分支成功,再因后面的 c 失败而拒绝。比较的是生成式的存在选择与识别式的优先承诺,不能未经证明把两套文法互换。
参考资料
- 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,§2.1。
- Old Dominion University CS390, Pushdown Automata, Fall 2024 course notes,§2.1,最左推导与栈模拟。