plsm-cpp/compiler/include/ASTVisitor.h
2024-02-24 21:34:06 +01:00

23 lines
491 B
C++

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