本次更新不会修改版本。
无论是DataType
,还是AstNode
,抑或是Token
,都需要调用方法来获取他们的具体类型,以进行详细的辨认。
但是,用现在的眼光看,AstNode
的getType()在设计时是欠缺更多思考的——利用虚函数重载的方式来实现。
这样做有两点问题: 1. 调用虚函数需要一定的开销 2. 在初始化语法树时需要一个一个类型判断过去并new出对应的节点,即使对应的节点没有任何特有的数据。即每个节点都需要特判
理想的解决方法应该是:在父类设立一个整数变量id
,子类在创建时初始化这个id。在初始化语法树时,对于没有任何特有数据的节点,可以直接创建父类,然后修改id。
目前,我已经把这种理想的解决方法应用到了Ast中。
用现在的眼光看,该节点是设计之初过度思考的产物。AstLeftPostfix
和AstPostfix
别无二致,因此我删去了他。