1 #ifndef CYMOCA_AST_EXPRESSION_EXPRESSION_H_
2 #define CYMOCA_AST_EXPRESSION_EXPRESSION_H_
7 namespace cymoca::ast::expression {
23 std::unique_ptr<INode>
clone()
const override {
24 return std::make_unique<Reference>(
getName());
28 #define BINARY_EXPR_MACRO(NAME) \
29 class NAME : public TBinary<Base, Base, Base> { \
32 using TBinary::TBinary; \
33 std::unique_ptr<INode> clone() const override { \
34 return cloneBinary<NAME>(); \
67 explicit Number(
double value) : _value(value) {}
69 void setValue(
double value) { _value = value; }
71 std::unique_ptr<INode>
clone()
const override {
72 return std::make_unique<Number>(getValue());
83 std::unique_ptr<INode>
clone()
const override {
return cloneList<List>(); }
91 std::unique_ptr<Reference>
m_ref;
96 explicit Function(std::unique_ptr<Reference> ref, std::unique_ptr<List> args)
102 std::unique_ptr<INode>
clone()
const override {
108 #define UNARY_EXPR_MACRO(NAME) \
109 class NAME : public TUnary<Base, Base> { \
112 using TUnary::TUnary; \
113 std::unique_ptr<INode> clone() const override { \
114 return cloneUnary<NAME>(); \
std::vector< INode * > getChildren() override
Reference(std::string name)
std::unique_ptr< INode > clone() const override
std::vector< INode * > getChildren() override
std::unique_ptr< INode > clone() const override
std::vector< INode * > getChildren() override
const Reference & getReference() const
std::unique_ptr< Reference > m_ref
Function(std::unique_ptr< Reference > ref, std::unique_ptr< List > args)
const std::string & getName() const
void setValue(double value)
virtual ~Reference()=default
#define UNARY_EXPR_MACRO(NAME)
void setName(const std::string &name)
std::unique_ptr< INode > clone() const override
std::unique_ptr< INode > clone() const override
#define BINARY_EXPR_MACRO(NAME)
std::unique_ptr< List > m_args