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>
{
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 visitUnaryExpr(UnaryExpr<std::string>* expression) override;
public:

View File

@ -29,24 +29,24 @@ struct BinaryExpr : Expr<T>
return visitor->visitBinaryExpr(this);
}
};
//template <typename T>
//struct GroupingExpr : Expr<T>, Visitor<T>
//{
// Expr<T> expression;
//
// GroupingExpr(Expr<T> expression) : expression(expression)
// {
// }
// T accept(Visitor<T> visitor){
// return visitor.visitGroupingExpr(this);
// }
//};
template <typename T>
struct GroupingExpr : Expr<T>
{
const std::shared_ptr<Expr<T> > expression;
GroupingExpr(std::shared_ptr<Expr<T> > expression) : expression(expression)
{
}
T accept(Visitor<T>* visitor) override{
return visitor->visitGroupingExpr(this);
}
};
template <typename T>
struct LiteralExpr : Expr<T>
{
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<T>* visitor) override{
@ -72,7 +72,7 @@ template <typename T>
struct Visitor
{
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 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});
}
//std::string ASTPrinter::visitGroupingExpr(GroupingExpr<std::string> expression){
// return "hi";
//}
std::string ASTPrinter::visitGroupingExpr(GroupingExpr<std::string>* expression){
return parenthesize("group", std::vector<std::shared_ptr<Expr<std::string> > >{expression->expression});
}
std::string ASTPrinter::visitLiteralExpr(LiteralExpr<std::string>* expression){
return expression->value;
}

View File

@ -17,14 +17,13 @@ int main(){
std::shared_ptr<Expr<std::string> > expression = std::make_shared<BinaryExpr<std::string> >(
std::make_shared<UnaryExpr<std::string> >(
Token{MINUS, "-", 0},
std::make_shared<LiteralExpr<std::string> >("123")
),
Token{STAR, "*", 0},
std::make_shared<UnaryExpr<std::string> >(
Token{MINUS, "+", 0},
std::make_shared<LiteralExpr<std::string> >("987")
)
Token{MINUS, "-", 1},
std::make_shared<LiteralExpr<std::string>>("123", true)
),
Token{STAR, "*", 1},
std::make_shared<GroupingExpr<std::string> >(
std::make_shared<LiteralExpr<std::string> >("45.67", true)
)
);
// Expr<std::string>* e = new BinaryExpr<std::string>(
@ -32,7 +31,7 @@ int main(){
// Token{STAR, "*", 0},
// 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());