Skip to content

语法树

Parse tree · Derivation tree

用树形结构记录文法产生式如何从开始符号生成一个字。

条目类型
模型

形式陈述

给定CFG G=(V,Σ,R,S),语法树是一棵有根有序树:根标记为 S;每个标记为非终结符 A 的内部节点,其从左到右的子节点标签组成某条产生式 AX1Xk 的右侧;叶节点标记为终结符或 ε。按从左到右读取终结符叶并忽略 ε,得到树的产出(yield)w

一个字 w 属于 L(G) 当且仅当存在产出为 w 的语法树。每棵语法树对应唯一的最左推导和唯一的最右推导,但普通推导可按许多顺序展开彼此独立的节点。

直觉

推导序列按时间记录“先展开哪个非终结符”,语法树则只保留最终的层次结构。两个推导若只是交换独立子树的展开顺序,会得到同一棵树;真正影响语法含义的是节点如何分组。树的叶序列还原输入,内部节点解释输入怎样由文法构造。它比 AST 更贴近具体文法,可能保留括号和辅助非终结符;编译器随后常把这些表面层次压缩成抽象语法。

例子与边界

对文法 SaSbε 和字 aabb,根用 SaSb,中间的 S 再用 aSb,最内层用 ε;叶从左到右为 a a ε b b,产出 aabb。无论先展开外层树中哪个已经出现的非终结符,固定树对应的最左推导仍唯一。

边界是把“两个不同推导序列”直接当作歧义。只有得到不同语法树,等价地得到不同最左推导或最右推导,才构成文法歧义。语法树也不自动包含标识符绑定、类型和源位置,这些通常是后续 AST 注解。

两棵树的叶序同为 a + a * a,但根使用不同产生式,因此文法有歧义。
推论与应用

文法歧义以一个字是否拥有两棵不同语法树定义。Chomsky 范式把内部节点限制为二叉结构,使 CYK 动态规划可按区间构造可能的树根。

解析器生成的具体语法树经消除辅助节点得到抽象语法树;属性文法、语义动作和类型检查再沿树传播信息。

参考资料
  • 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。
关系图谱3 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

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

上位 / 更一般

下位 / 直接特例

暂未标注直接特例。