// // Created by Bobby Lucero on 5/23/23. // #include "../headers/ASTPrinter.h" std::string ASTPrinter::visitBinaryExpr(BinaryExpr* expression){ std::cout << expression->left << std::endl; return parenthesize(expression->oper.lexeme, std::vector>>{expression->left, expression->right}); } std::string ASTPrinter::visitGroupingExpr(GroupingExpr* expression){ return parenthesize("group", std::vector>>{expression->expression}); } std::string ASTPrinter::visitLiteralExpr(LiteralExpr* expression){ return expression->value; } std::string ASTPrinter::visitUnaryExpr(UnaryExpr* expression){ return parenthesize(expression->oper.lexeme, std::vector>>{expression->right}); } std::string ASTPrinter::print(Expr *expr) { return expr->accept(this); } std::string ASTPrinter::parenthesize(std::string name, std::vector>> exprs) { std::string builder; builder += "(" + name; for(std::shared_ptr> expr : exprs) { std::cout << expr << std::endl; builder += " "; builder += expr->accept(this); } builder += ")"; return builder; }