C++扩展智能指针实现AST节点替换的方案咨询
C++自研语言AST Visitor模式节点替换方案疑问
我正在用C++开发一款自研编程语言,目前已确定采用Visitor设计模式处理AST(抽象语法树),需实现以下操作:
- 代码生成
- 将AST打印至文本文件用于调试
- 修改AST结构(替换节点)
现有AST节点存储结构示例:
std::vector<std::shared_ptr<Node>> nodes = {A, B, C};
核心需求
期望Visitor遍历树后生成替换列表(如“将B替换为D”),且无需重新遍历整棵树即可完成替换。
当前困惑与尝试
我原本以为借助智能指针的重定向特性可轻松实现该功能——通过引用智能指针来更新其指向的新对象,但查资料得知C++标准库智能指针并不支持/推荐此操作。我纠结是否应自行实现具备该功能的智能指针,或是否存在标准实现方案。
我考虑过两种方案,但都有顾虑:
- 使用
std::shared_ptr<Node>*替代传递std::shared_ptr<Node>,但担心Visitor模式需额外传递此类指针引用,使用不便; - 将存储结构改为
std::vector<std::shared_ptr<Node>*> nodes;,但双指针间接访问会降低遍历树的效率,这似乎不合理。
注:我知道
std::vector并非树形结构,部分Node会包含其他Node,可能存储在自身的std::vector中
内容的提问来源于stack exchange,提问作者Zachary Vander Klippe
相关产品推荐
相关产品推荐

