From 7b59f1f596ad19dc378fea532e5120db707cca35 Mon Sep 17 00:00:00 2001 From: Bobby Lucero Date: Wed, 24 May 2023 00:57:49 -0400 Subject: [PATCH] Minor Changes --- headers/ASTPrinter.h | 2 +- headers/Expression.h | 30 +++++++++++++++--------------- source/ASTPrinter.cpp | 6 +++--- source/main.cpp | 17 ++++++++--------- 4 files changed, 27 insertions(+), 28 deletions(-) diff --git a/headers/ASTPrinter.h b/headers/ASTPrinter.h index adc4d2d..fbcda39 100644 --- a/headers/ASTPrinter.h +++ b/headers/ASTPrinter.h @@ -6,7 +6,7 @@ class ASTPrinter : public Visitor { std::string visitBinaryExpr(BinaryExpr* expression) override; -// std::string visitGroupingExpr(GroupingExpr expression); + std::string visitGroupingExpr(GroupingExpr* expression) override; std::string visitLiteralExpr(LiteralExpr* expression) override; std::string visitUnaryExpr(UnaryExpr* expression) override; public: diff --git a/headers/Expression.h b/headers/Expression.h index a911617..b2ae208 100644 --- a/headers/Expression.h +++ b/headers/Expression.h @@ -29,24 +29,24 @@ struct BinaryExpr : Expr return visitor->visitBinaryExpr(this); } }; -//template -//struct GroupingExpr : Expr, Visitor -//{ -// Expr expression; -// -// GroupingExpr(Expr expression) : expression(expression) -// { -// } -// T accept(Visitor visitor){ -// return visitor.visitGroupingExpr(this); -// } -//}; +template +struct GroupingExpr : Expr +{ + const std::shared_ptr > expression; + + GroupingExpr(std::shared_ptr > expression) : expression(expression) + { + } + T accept(Visitor* visitor) override{ + return visitor->visitGroupingExpr(this); + } +}; template struct LiteralExpr : Expr { const std::string value; - - LiteralExpr(std::string value) : value(value) + const bool isNumber; + LiteralExpr(std::string value, bool isNumber) : value(value), isNumber(isNumber) { } T accept(Visitor* visitor) override{ @@ -72,7 +72,7 @@ template struct Visitor { virtual T visitBinaryExpr(BinaryExpr* expression) = 0; -// virtual T visitGroupingExpr(GroupingExpr expression){}; + virtual T visitGroupingExpr(GroupingExpr* expression) = 0; virtual T visitLiteralExpr(LiteralExpr* expression) = 0; virtual T visitUnaryExpr(UnaryExpr* expression) = 0; }; diff --git a/source/ASTPrinter.cpp b/source/ASTPrinter.cpp index 9ac6c7c..3d7e6dd 100644 --- a/source/ASTPrinter.cpp +++ b/source/ASTPrinter.cpp @@ -9,9 +9,9 @@ std::string ASTPrinter::visitBinaryExpr(BinaryExpr* expression){ return parenthesize(expression->oper.lexeme, std::vector > >{expression->left, expression->right}); } -//std::string ASTPrinter::visitGroupingExpr(GroupingExpr expression){ -// return "hi"; -//} +std::string ASTPrinter::visitGroupingExpr(GroupingExpr* expression){ + return parenthesize("group", std::vector > >{expression->expression}); +} std::string ASTPrinter::visitLiteralExpr(LiteralExpr* expression){ return expression->value; } diff --git a/source/main.cpp b/source/main.cpp index 8042f78..0592045 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -17,14 +17,13 @@ int main(){ std::shared_ptr > expression = std::make_shared >( std::make_shared >( - Token{MINUS, "-", 0}, - std::make_shared >("123") - ), - Token{STAR, "*", 0}, - std::make_shared >( - Token{MINUS, "+", 0}, - std::make_shared >("987") - ) + Token{MINUS, "-", 1}, + std::make_shared>("123", true) + ), + Token{STAR, "*", 1}, + std::make_shared >( + std::make_shared >("45.67", true) + ) ); // Expr* e = new BinaryExpr( @@ -32,7 +31,7 @@ int main(){ // Token{STAR, "*", 0}, // new UnaryExpr(Token{PLUS, "+", 0}, new LiteralExpr("535")) // ); - LiteralExpr* le = new LiteralExpr("123"); + LiteralExpr* le = new LiteralExpr("123", true); std::cout << printer.print(expression.get());