数学表达式解释器
示例需求
- 支持数字、变量、加减乘除运算
- 支持函数调用(如
max(2,3)
)
- 能够处理嵌套表达式(如
(x + 5) * max(y,10)
)
完整代码实现
#include <iostream>
#include <memory>
#include <unordered_map>
#include <vector>
#include <sstream>
#include <cctype>
#include <cmath>
class Context {
public:
std::unordered_map<std::string, double> variables;
double getVariable(const std::string& name) const {
auto it = variables.find(name);
if (it == variables.end()) throw std::runtime_error("Undefined variable: " + name);
return it->second;
}
};
class Expression {
public:
virtual double interpret(const Context& ctx) const = 0;
virtual ~Expression() = default;
};
class Number : public Expression {
double value;
public:
Number(double v) : value(v) {
}
double interpret(const Context&) const override {
return value; }
};
class Variable : public Expression {
std::string name;
public:
Variable(std::string n) : name(std::move(n)) {
}
double interpret(const Context& ctx) const override {
return ctx.getVariable(name);
}
};
class AddExpr : public Expression {
std::unique_ptr<Expression> left, right;
public:
AddExpr(Expression* l, Expression* r) : left(l), right(r) {
}
double interpret(const Context& ctx) const override {
return left->interpret(ctx) + right->interpret(ctx);
}
};
class MultiplyExpr : public Expression {
std::unique_ptr<Expression> left, right;
public:
MultiplyExpr(Expression