#include #include #include using namespace std; class Expression { public: virtual int interpreter(map var)=0; virtual ~Expression(){} }; //变量表达式 class VarExpression: public Expression { char key; public: VarExpression(const char& key) { this->key = key; } int interpreter(map var) override { return var[key]; } }; //符号表达式 class SymbolExpression : public Expression { // 运算符左右两个参数 protected: Expression* left; Expression* right; public: SymbolExpression( Expression* left, Expression* right): left(left),right(right){ } }; //加法运算 class AddExpression : public SymbolExpression { public: AddExpression(Expression* left, Expression* right): SymbolExpression(left,right){ } int interpreter(map var) override { return left->interpreter(var) + right->interpreter(var); } }; //减法运算 class SubExpression : public SymbolExpression { public: SubExpression(Expression* left, Expression* right): SymbolExpression(left,right){ } int interpreter(map var) override { return left->interpreter(var) - right->interpreter(var); } }; Expression* analyse(string expStr) { stack expStack; Expression* left = nullptr; Expression* right = nullptr; for(int i=0; i var; var.insert(make_pair('a',5)); var.insert(make_pair('b',2)); var.insert(make_pair('c',1)); var.insert(make_pair('d',6)); var.insert(make_pair('e',10)); Expression* expression= analyse(expStr); int result=expression->interpreter(var); cout<