为了便于后续进行语义分析和代码生成,需要去除语法分析树中的冗余部分,将其转化为一棵只包含有用信息的抽象语法树(AST),抽象语法树的设计参见概要设计{loc}。

    该部分首先介绍AST的节点类定义,然后介绍设计的函数接口,随后以转移图的形式介绍函数之间的调用关系,最后以伪代码的形式给出所有函数的详细设计实现。

    往下读就可以观察到,在转化为AST的函数中,出现了许多命名相似的函数。例如getValueParameter、getParameter、getFormalParameter、getFormalParaList,又例如setConst、getConst、getConstList。出现这样的命名情况并不是我们的命名习惯问题,而正是普通语法分析树的冗余信息问题导致的。当然我们也可以写出一长串的指针链,来避免这种函数命名情况,但是为了编程的方便,拒绝长串指针链(而且长指针链更容易写出BUG),我们采用了这种看似复杂的命名方法。接下来我们会尽量讲清楚这些函数各自的用途和相互之间的调用关系。

    想要深入理解整个普通语法树转AST的过程,需要通读下面的文档,在粗略了解了接口之后,需要再深入阅读调用关系和各函数的具体实现。

    需要时刻牢记于心的是,Type*指针提供的是普通语法树的节点,提供的是输入信息;其它的所有类指针提供的是AST的节点,提供的是输出信息的载体。