AST
class definition
数据成员
对于一个ast对象,其具备三个子树根节点,以及当前节点的字符串类型符号,另外,再保存一个bool类型变量,指示当前节点是否为叶子节点。
1 | /* AST */ |
定义两个全局函数,用于判断符号是否为终结符号,以及是否为运算符。
1 |
|
方法
除了默认构造函数以及两个接收string类型(左值和右值)的构造函数外,我们在定义两个成员方法和一个静态方法:
- built_ast:接受一个istream类型的参数,读取输入的ast文本表示信息,构建ast对象,该方法与特定的ast对象无关,因此用static修饰。
- post_traverse:接收一个ast类型参数,打印其四元式序列,本质为后序遍历。
- check:递归检查该ast的各层节点之间的“父子关系”,用于调试使用。
首先实现逻辑较为简单的check,我们一次打印出当前节点的符号以及子树的符号即可,如果某一个子树为空,则用#替代
1 | void AST::check() const |
再开post_traverse,
1 |
|
build_ast的实现源码为:
1 | AST * AST::build_AST(istream & in) |
测试
测试文件:
1 | E minus |
编写main函数,使用测试文件测试ast:
1 | int main() |
输出如下:
1 | :=,num,-,K |