⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 interpreter.c

📁 design_patterns code设计模式书中的源码 对学习设计模式的人很有帮助的
💻 C
字号:
/**/#include "defs.H"#include <strings.h>class VariableExp;class Context;/**/class BooleanExp {public:    BooleanExp();    virtual ~BooleanExp();/**/    virtual bool Evaluate(Context&) = 0;    virtual BooleanExp* Replace(const char*, BooleanExp&) = 0;    virtual BooleanExp* Copy() const = 0;};/**/class Context {public:    bool Lookup(const char*) const;    void Assign(VariableExp*, bool);};/**/class VariableExp : public BooleanExp {public:    VariableExp(const char*);    virtual ~VariableExp();/**/    virtual bool Evaluate(Context&);    virtual BooleanExp* Replace(const char*, BooleanExp&);    virtual BooleanExp* Copy() const;private:    char* _name;};/**/VariableExp::VariableExp (const char* name) {    _name = strdup(name);}/**/bool VariableExp::Evaluate (Context& aContext) {    return aContext.Lookup(_name);}/**/BooleanExp* VariableExp::Copy () const {    return new VariableExp(_name);}/**/BooleanExp* VariableExp::Replace (    const char* name, BooleanExp& exp) {    if (strcmp(name, _name) != 0) {        return exp.Copy();    } else {        return new VariableExp(_name);   }}/**/class AndExp : public BooleanExp {public:    AndExp(BooleanExp*, BooleanExp*);    virtual ~ AndExp();/**/    virtual bool Evaluate(Context&);    virtual BooleanExp* Replace(const char*, BooleanExp&);    virtual BooleanExp* Copy() const;private:    BooleanExp* _operand1;    BooleanExp* _operand2;};/**/AndExp::AndExp (BooleanExp* op1, BooleanExp* op2) {    _operand1 = op1;    _operand2 = op2;}/**/bool AndExp::Evaluate (Context& aContext) {    return        _operand1->Evaluate(aContext) &&        _operand2->Evaluate(aContext);}/**/BooleanExp* AndExp::Copy () const {    return        new AndExp(_operand1->Copy(), _operand2->Copy());}/**/BooleanExp* AndExp::Replace (const char* name, BooleanExp& exp) {    return        new AndExp(            _operand1->Replace(name, exp),            _operand2->Replace(name, exp)        );}/**/class Constant : public  BooleanExp {public:    Constant(int v) { _value = v; };    virtual bool Evaluate(Context&);    virtual BooleanExp* Replace(const char*, BooleanExp&);    virtual BooleanExp* Copy() const;private:    int _value;};class OrExp : public BooleanExp {public:    OrExp(BooleanExp*, BooleanExp*);    virtual ~ OrExp();    virtual bool Evaluate(Context&);    virtual BooleanExp* Replace(const char*, BooleanExp&);    virtual BooleanExp* Copy() const;private:    BooleanExp* _operand1;    BooleanExp* _operand2;};class NotExp : public BooleanExp {public:    NotExp(BooleanExp*);    virtual ~ NotExp();    virtual bool Evaluate(Context&);    virtual BooleanExp* Replace(const char*, BooleanExp&);    virtual BooleanExp* Copy() const;private:    BooleanExp* _operand;};main () {/**/BooleanExp* expression;Context context;VariableExp* x = new VariableExp("X");VariableExp* y = new VariableExp("Y");expression = new OrExp(    new AndExp(new Constant(true), x),    new AndExp(y, new NotExp(x)));/**/context.Assign(x, false);context.Assign(y, true);bool result = expression->Evaluate(context);/**/BooleanExp* replacement;VariableExp* z = new VariableExp("Z");replacement = new NotExp(z);expression->Replace("Y", *replacement);context.Assign(z, true);result = expression ->Evaluate(context);/**/}/**/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -