Minor Changes
This commit is contained in:
parent
d909e546f2
commit
7b59f1f596
@ -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:
|
||||||
|
|||||||
@ -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;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -17,14 +17,13 @@ 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")
|
)
|
||||||
)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
// Expr<std::string>* e = new BinaryExpr<std::string>(
|
// Expr<std::string>* e = new BinaryExpr<std::string>(
|
||||||
@ -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());
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user