您的位置:首页 > 编程语言 > C语言/C++

c++设计模式--解释器模式

2015-06-07 11:45 507 查看

解释器模式(Interpreter)定义了一个类体系,用于实现一个小型语言的解释器。它与组合模式很相似,而且常常利用组合模式来实现语法树的构建。

GOOD:通常当一个语言需要解释执行,并且你可以将该语言中的句子表示成为一个抽象的语法树时,可以使用解释器模式。



RES:http://hi.baidu.com/xuehuo_0411/item/41778e77d47f9d43ef1e53e8

C++实现:

[cpp]
view plaincopyprint?





#include <iostream>

#include <vector>

#include <string>

using namespace std;



class Context

{

public:

string input;

string output;

};



class AbstractExpression

{

public:

virtual void Interpret(Context* context) = 0;

};



class Expression : public AbstractExpression

{

public:

virtual void Interpret(Context* context) { cout << "终端解释器" << endl; }

};



class NonTerminalExpression : public AbstractExpression

{

public:

virtual void Interpret(Context* context) { cout << "非终端解释器" << endl; }

};



int main(int argc, char* argv[])

{

Context* context = new Context();

vector<AbstractExpression*> express;

express.push_back(new Expression());

express.push_back(new NonTerminalExpression());

express.push_back(new NonTerminalExpression());



vector<AbstractExpression*>::iterator it;

for (it=express.begin(); it!=express.end(); ++it)

{

(*it)->Interpret(context);

}



return 0;

}

#include <iostream>

#include <vector>

#include <string>

using namespace std;

 

class Context

{

public:

string input;

string output;

};

 

class AbstractExpression

{

public:

virtual void Interpret(Context* context) = 0;

};

 

class Expression : public AbstractExpression

{

public:

virtual void Interpret(Context* context) { cout << "终端解释器" << endl; }

};

 

class NonTerminalExpression : public AbstractExpression

{

public:

virtual void Interpret(Context* context) { cout << "非终端解释器" << endl; }

};

 

int main(int argc, char* argv[])

{

Context* context = new Context();

vector<AbstractExpression*> express;

express.push_back(new Expression());

express.push_back(new NonTerminalExpression());

express.push_back(new NonTerminalExpression());

vector<AbstractExpression*>::iterator it;

for (it=express.begin(); it!=express.end(); ++it)

{

(*it)->Interpret(context);

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: