Minor Changes

This commit is contained in:
Bobby Lucero 2023-05-24 00:57:49 -04:00
parent d909e546f2
commit 7b59f1f596
4 changed files with 27 additions and 28 deletions

View File

@ -6,7 +6,7 @@
class ASTPrinter : public Visitor<std::string> class ASTPrinter : public Visitor<std::string>
{ {
std::string visitBinaryExpr(BinaryExpr<std::string>* expression) override; std::string visitBinaryExpr(BinaryExpr<std::string>* expression) override;
// std::string visitGroupingExpr(GroupingExpr<std::string> expression); std::string visitGroupingExpr(GroupingExpr<std::string>* expression) override;
std::string visitLiteralExpr(LiteralExpr<std::string>* expression) override; std::string visitLiteralExpr(LiteralExpr<std::string>* expression) override;
std::string visitUnaryExpr(UnaryExpr<std::string>* expression) override; std::string visitUnaryExpr(UnaryExpr<std::string>* expression) override;
public: public:

View File

@ -29,24 +29,24 @@ struct BinaryExpr : Expr<T>
return visitor->visitBinaryExpr(this); return visitor->visitBinaryExpr(this);
} }
}; };
//template <typename T> template <typename T>
//struct GroupingExpr : Expr<T>, Visitor<T> struct GroupingExpr : Expr<T>
//{ {
// Expr<T> expression; const std::shared_ptr<Expr<T> > expression;
//
// GroupingExpr(Expr<T> expression) : expression(expression) GroupingExpr(std::shared_ptr<Expr<T> > expression) : expression(expression)
// { {
// } }
// T accept(Visitor<T> visitor){ T accept(Visitor<T>* visitor) override{
// return visitor.visitGroupingExpr(this); return visitor->visitGroupingExpr(this);
// } }
//}; };
template <typename T> template <typename T>
struct LiteralExpr : Expr<T> struct LiteralExpr : Expr<T>
{ {
const std::string value; const std::string value;
const bool isNumber;
LiteralExpr(std::string value) : value(value) LiteralExpr(std::string value, bool isNumber) : value(value), isNumber(isNumber)
{ {
} }
T accept(Visitor<T>* visitor) override{ T accept(Visitor<T>* visitor) override{
@ -72,7 +72,7 @@ template <typename T>
struct Visitor struct Visitor
{ {
virtual T visitBinaryExpr(BinaryExpr<T>* expression) = 0; virtual T visitBinaryExpr(BinaryExpr<T>* expression) = 0;
// virtual T visitGroupingExpr(GroupingExpr<T> expression){}; virtual T visitGroupingExpr(GroupingExpr<T>* expression) = 0;
virtual T visitLiteralExpr(LiteralExpr<T>* expression) = 0; virtual T visitLiteralExpr(LiteralExpr<T>* expression) = 0;
virtual T visitUnaryExpr(UnaryExpr<T>* expression) = 0; virtual T visitUnaryExpr(UnaryExpr<T>* expression) = 0;
}; };

View File

@ -9,9 +9,9 @@ std::string ASTPrinter::visitBinaryExpr(BinaryExpr<std::string>* expression){
return parenthesize(expression->oper.lexeme, std::vector<std::shared_ptr<Expr<std::string> > >{expression->left, expression->right}); return parenthesize(expression->oper.lexeme, std::vector<std::shared_ptr<Expr<std::string> > >{expression->left, expression->right});
} }
//std::string ASTPrinter::visitGroupingExpr(GroupingExpr<std::string> expression){ std::string ASTPrinter::visitGroupingExpr(GroupingExpr<std::string>* expression){
// return "hi"; return parenthesize("group", std::vector<std::shared_ptr<Expr<std::string> > >{expression->expression});
//} }
std::string ASTPrinter::visitLiteralExpr(LiteralExpr<std::string>* expression){ std::string ASTPrinter::visitLiteralExpr(LiteralExpr<std::string>* expression){
return expression->value; return expression->value;
} }

View File

@ -17,13 +17,12 @@ int main(){
std::shared_ptr<Expr<std::string> > expression = std::make_shared<BinaryExpr<std::string> >( std::shared_ptr<Expr<std::string> > expression = std::make_shared<BinaryExpr<std::string> >(
std::make_shared<UnaryExpr<std::string> >( std::make_shared<UnaryExpr<std::string> >(
Token{MINUS, "-", 0}, Token{MINUS, "-", 1},
std::make_shared<LiteralExpr<std::string> >("123") std::make_shared<LiteralExpr<std::string>>("123", true)
), ),
Token{STAR, "*", 0}, Token{STAR, "*", 1},
std::make_shared<UnaryExpr<std::string> >( std::make_shared<GroupingExpr<std::string> >(
Token{MINUS, "+", 0}, std::make_shared<LiteralExpr<std::string> >("45.67", true)
std::make_shared<LiteralExpr<std::string> >("987")
) )
); );
@ -32,7 +31,7 @@ int main(){
// Token{STAR, "*", 0}, // Token{STAR, "*", 0},
// new UnaryExpr<std::string>(Token{PLUS, "+", 0}, new LiteralExpr<std::string>("535")) // new UnaryExpr<std::string>(Token{PLUS, "+", 0}, new LiteralExpr<std::string>("535"))
// ); // );
LiteralExpr<std::string>* le = new LiteralExpr<std::string>("123"); LiteralExpr<std::string>* le = new LiteralExpr<std::string>("123", true);
std::cout << printer.print(expression.get()); std::cout << printer.print(expression.get());