介紹
參與者
實現(xiàn)代碼
#include <iostream>
#include <map>
class Context;
class Expression {
public:
virtual int interpreter(Context *) = 0;//一定會有解釋方法
virtual ~Expression() = default;
};
class Context{
public:
int getVal(Expression *expression)
{
auto it = m.find(expression);
if(m.end() != it)
{
return it->second;
}
return 0;
}
void insert(Expression *expression,int val)
{
m.insert(std::make_pair(expression,val));
}
private:
std::map<Expression*,int> m;
};
class TerminalExpression :public Expression{
public:
explicit TerminalExpression(std::string name_)
{
name = name_;
}
int interpreter(Context *context) override
{
return context->getVal(this);
}
~TerminalExpression() override = default;
private:
std::string name;
};
class NonTerminalExpressinon : public Expression{
public:
NonTerminalExpressinon(Expression *ee1,Expression *ee2)
{
e1 = ee1;
e2 = ee2;
}
Expression *e1;
Expression *e2;
int interpreter(Context *context) override
{
return 0;
}
~NonTerminalExpressinon() override = default;
};
class Plus : public NonTerminalExpressinon {
public:
Plus(Expression *ee1,Expression *ee2):NonTerminalExpressinon(ee1,ee2)
{
}
int interpreter(Context *context) override
{
return e1->interpreter(context) + e2->interpreter(context);
}
~Plus() override = default;
};
class Minus : public NonTerminalExpressinon {
public:
Minus(Expression *ee1,Expression *ee2):NonTerminalExpressinon(ee1,ee2)
{
}
int interpreter(Context *context) override
{
return e1->interpreter(context) - e2->interpreter(context);
}
~Minus() override = default;
};
int main()
{
auto *context = new Context();
Expression *e1 = new TerminalExpression("a");
Expression *e2 = new TerminalExpression("b");
Expression *e3 = new TerminalExpression("c");
context->insert(e1,44);
context->insert(e2,55);
context->insert(e3,77);
Expression* plus = new Plus(new Minus(e1,e2),e3);
auto ret = plus->interpreter(context);
std::cout<<"輸出結(jié)果為:"<<ret<<std::endl;
}
輸出結(jié)果
輸出結(jié)果為:66
特點
參考
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。