跳转至

4 有代表性的SDD

语法制导定义(Syntax-Directed Definition, SDD)

抽象语法树的构造

  • Leaf (op, val) 是一个叶子
  • Node (op, c~1~, c~2~, ..., c~k~) 是一个内部节点,c~i~ 是这个节点的所有字段

下面是一个 SDD,每一个非终结符有综合属性 node,表示相应的抽象语法树节点。

image-20221123211033202

image-20221123211525462

这里的文法是有左递归的,也可以用没有的版本重新写 SDD

“类型” 的结构

  • array (num, type) 表示一个数组,如 \textbf{int }[2][3] 的类型表达式为
array(2,array(3,\textbf{integer}))

这里给非终结符 C 引入:

  • 继承属性 b,将一个基本类型沿着树向下传播,方便尾部知道自己的基本类型
  • 综合属性 type,收集最终得到的结果

image-20221123212550865

image-20221123212720719

可见综合属性 type 是自底向上的,而继承属性 b 是自顶向下流动的。

本文阅读量