Bob/testthing

52 lines
1.1 KiB
Plaintext

template <typename T>
struct BinaryExpr : Expr<T>, Visitor<T>
{
const Expr<T> left;
const Token oper;
const Expr<T> right;
BinaryExpr(Expr<T> left, Token oper, Expr<T> right) : left(left), oper(oper), right(right)
{
}
T accept(Visitor<T> visitor){
return visitor.visitBinaryExpr(this);
}
};
template <typename T>
struct GroupingExpr : Expr<T>, Visitor<T>
{
const Expr<T> expression;
GroupingExpr(Expr<T> expression) : expression(expression)
{
}
T accept(Visitor<T> visitor){
return visitor.visitGroupingExpr(this);
}
};
template <typename T>
struct LiteralExpr : Expr<T>, Visitor<T>
{
const std::string value;
LiteralExpr(std::string value) : value(value)
{
}
T accept(Visitor<T> visitor){
return visitor.visitLiteralExpr(this);
}
};
template <typename T>
struct UnaryExpr : Expr<T>, Visitor<T>
{
const Token oper;
const Expr<T> right;
UnaryExpr(Token oper, Expr<T> right) : oper(oper), right(right)
{
}
T accept(Visitor<T> visitor){
return visitor.visitUnaryExpr(this);
}
};