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;
}
解释器模式(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; }
相关文章推荐
- C++ 画星号图形——空心矩形(核心代码记录)
- 设计模式C++实现-解释器模式
- Visual C++剪贴板操作不完全攻略
- 《爱编程,爱c++十二期-第三章-c++函数思想》
- 单例模式——C++实现自动释放单例类的实例
- c和c++关于const的一些区别
- gcc编译C++程序
- HDU-1038-Biker's Trip Odometer(C++ && 提高英语能力!)
- chapter11test3
- C++中this指针的用法详解
- c++实现两个文件的拼接。
- c++虚函数表
- c++虚函数表
- NYOJ 49 开心的小明(01背包问题)
- NYOJ 47 过河问题
- C++模板中的静态
- 一起talk C栗子吧(第十一回:C语言实例--文件组织结构)
- 我所理解的设计模式(C++实现)——命令模式(Command Pattern)
- VC++注射过程
- NYOJ 38 布线问题_(解法2 Prim算法)