Skip to content

抽象语法树

Abstract syntax tree · AST

以树结构保留程序构造层次而省略表面语法细节的表示。

形式陈述

抽象语法树是由语法构造子归纳生成的有限树;每个节点标签决定其子节点数量与类别。与具体语法树相比,AST 通常省略括号、分隔符和可由结构恢复的非终结符,只保留语义分析需要的构造。

直觉

源代码字符串先被解析为“程序由哪些子程序构成”的树。树形结构使作用域、类型和求值规则可以递归定义。

例子与边界

表达式 1 + 2 * 3 的 AST 根是加法,右子树是乘法,优先级已编码在结构中。不同表面语法可以映到同一 AST。若完全丢弃源位置或注释,会影响诊断与格式化,但不改变核心语义。

推论与应用

编译器在 AST 上进行名称解析、类型检查和变换;结构归纳证明也沿 AST 构造展开。后续 IR 可能改用控制流图或 SSA,但它们不是 AST 本身。

参考资料
  • Robert Harper, Practical Foundations for Programming Languages, 2nd ed., Cambridge University Press, 2016, Chapters 1–4。
  • Benjamin C. Pierce, Types and Programming Languages, MIT Press, 2002, Chapters 3–5。