#ifndef MANDEL_ITERATIONFORMULA_H #define MANDEL_ITERATIONFORMULA_H #include #include #include namespace mnd { struct IterationFormula; struct Constant; struct Variable; struct UnaryOperation; struct BinaryOperation; struct Addition; struct Multiplication; struct Division; struct Pow; using Expression = std::variant< Constant, Variable, UnaryOperation, Addition, Multiplication, Division, Pow >; std::unique_ptr parse(const std::string& formula); } struct mnd::IterationFormula { std::unique_ptr expr; }; struct mnd::Constant { double value; inline Constant(double value) : value{ value } {} }; struct mnd::Variable { std::string name; }; struct mnd::UnaryOperation { std::unique_ptr operand; }; struct mnd::BinaryOperation { std::unique_ptr left; std::unique_ptr right; }; struct mnd::Addition : mnd::BinaryOperation { bool subtraction = false; }; struct mnd::Multiplication : mnd::BinaryOperation { }; struct mnd::Division : mnd::BinaryOperation { }; struct mnd::Pow : mnd::BinaryOperation { }; #endif // MANDEL_ITERATIONFORMULA_H