#pragma once #include #include "AST.h" template class ASTVisitor { virtual T visit(const ASTNode *node) { if (IntValue *cnode = dynamic_cast(node)) return visitIntValue(cnode); else if (FloatValue *cnode = dynamic_cast(node)) return visitFloatValue(cnode); throw std::logic_error("not implemented"); } virtual T visitIntValue(const IntValue *node); virtual T visitFloatValue(const IntValue *node); };