Skip to content

文法歧义

Grammar ambiguity

某个字存在两个不同语法树或最左推导时文法具有的性质。

条目类型
定义

形式陈述

上下文无关文法 G 称为歧义的,若存在某个 wL(G),使 w 有两棵不同的语法树。等价地,w 有两个不同的最左推导,也等价于有两个不同的最右推导。

语言 L 称为固有歧义的,若每个生成 L 的 CFG 都歧义。文法歧义是描述的性质,不是语言成员关系本身的性质;一个歧义文法可能有等价的无歧义文法。一般 CFG 的歧义性判定属于不可判定问题

直觉

歧义意味着同一输入可以被文法赋予两种不同层次结构,而不只是推导步骤顺序不同。对程序表达式,这两棵树往往对应不同求值,例如先加后乘与先乘后加。消除歧义的常见做法是把优先级和结合性编码进非终结符层次,使每个操作数只能出现在恰当位置。语言是否固有歧义更深:它问能否换一套文法彻底解决,而不是能否修补当前规则。

例子与边界

文法

EE+EEEid

id+id*id 有两棵树,分别表示 (id+id)idid+(idid)。可用分层文法 E→E+T|TT→T*F|FF→id|(E) 固定乘法高优先级和左结合。

边界是同一棵树的不同展开次序:先展开左子树或右子树可形成不同普通推导,却不构成歧义。解析器的 shift/reduce 冲突提示某种不确定性,但冲突也可能由解析算法或文法表示方式造成,不能无条件等同于语言固有歧义。

同样,解析器用优先级或结合性规则强制选出一棵树,只是给原文法外加消歧策略,并没有证明原 CFG 本身无歧义。

推论与应用

歧义直接影响语法树、编译器语义动作和自然语言解析。操作符优先级、悬挂 else、模式匹配结合方式都需要通过文法改写或外部消歧规则处理。

它位于上下文无关文法理论的算法边界:成员资格可判定,文法等价与歧义性却不可判定。无歧义文法还可用于定义唯一概率解析或唯一代码生成结构。

参考资料
  • John E. Hopcroft, Rajeev Motwani, and Jeffrey D. Ullman, Introduction to Automata Theory, Languages, and Computation, 3rd ed., Pearson, 2006,Chs. 1–9。
  • Michael Sipser, Introduction to the Theory of Computation, 3rd ed., Cengage, 2013,Chs. 0–10。
关系图谱2 个相邻概念 · 1 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组