#pragma once #include "Expression.h" #include "TypeWrapper.h" #include #include class ASTPrinter : public Visitor> { std::shared_ptr visitBinaryExpr(BinaryExpr>* expression) override; std::shared_ptr visitGroupingExpr(GroupingExpr>* expression) override; std::shared_ptr visitLiteralExpr(LiteralExpr>* expression) override; std::shared_ptr visitUnaryExpr(UnaryExpr>* expression) override; public: std::shared_ptr print(Expr>* expr); private: std::shared_ptr parenthesize(std::string name, std::vector>>> exprs); };