设计模式C++描述----21.解释器(Iterpreter)模式
2012-05-21 12:23
351 查看
一. 解释器模式
定义:给定一个语言,定义它的文法的一种表示,并定一个解释器,这个解释器使用该表示来解释语言中的句子。
结构如下:
代码如下:
二. 说明
解释器模式就是用“迷你语言”来表现程序要解决的问题。
比如:在C语言解释器,当你输入 int 时,解释器就能正确的开辟一个 int 的空间出来。
再比如: linux 下常用的命令参数,如 ls -a,-a 就能被正确的解释成相应的命令。
优点:这种模式很容易改变和扩展文法,因为每个文法有一个文法类,也就是上面的表达式类。
缺点:当文法非常复杂时,要管理和维护很多个文法类。
定义:给定一个语言,定义它的文法的一种表示,并定一个解释器,这个解释器使用该表示来解释语言中的句子。
结构如下:
代码如下:
//包含解释器之外的一些全局信息 class Context { public: Context() {} ~Context() {} }; class AbstractExpression { public: virtual ~AbstractExpression() {} virtual void Interpret(const Context& c) {} protected: AbstractExpression() {} }; //终结符表达式 class TerminalExpression:public AbstractExpression { public: TerminalExpression(const string& statement) { this->_statement = statement; } ~TerminalExpression(){} void Interpret(const Context& c) { cout<<this->_statement<<" Terminal Expression..."<<endl; } private: string _statement; }; //非终结符表达式 class NonterminalExpression:public AbstractExpression { public: NonterminalExpression(const string& statement) { this->_statement = statement; } ~NonterminalExpression() {} void Interpret(const Context& c) { cout<<this->_statement<<" Nonterminal Expression..."<<endl; } private: string _statement; }; //测试代码 int main(int argc,char* argv[]) { Context* c = new Context(); list<AbstractExpression*> ls; ls.push_back(new TerminalExpression("A")); ls.push_back(new NonterminalExpression("B")); ls.push_back(new TerminalExpression("C")); ls.push_back(new NonterminalExpression("D")); list<AbstractExpression*>::iterator it = ls.begin(); for (it; it != ls.end(); ++it) { (*it)->Interpret(*c); } return 0; }
二. 说明
解释器模式就是用“迷你语言”来表现程序要解决的问题。
比如:在C语言解释器,当你输入 int 时,解释器就能正确的开辟一个 int 的空间出来。
再比如: linux 下常用的命令参数,如 ls -a,-a 就能被正确的解释成相应的命令。
优点:这种模式很容易改变和扩展文法,因为每个文法有一个文法类,也就是上面的表达式类。
缺点:当文法非常复杂时,要管理和维护很多个文法类。
相关文章推荐
- 设计模式C++描述----21.解释器(Iterpreter)模式
- 设计模式C++实现(21)——访问者模式
- 设计模式C++描述----07.建造者(Builder)模式
- 设计模式C++描述----11.组合(Composite)模式
- 设计模式利剑21--解释器模式
- 设计模式解密(21)- 解释器模式
- 用UML描述C++设计模式
- 设计模式C++描述----15.策略(Strategy)模式
- 设计模式C++描述----19.命令(Command)模式
- c++设计模式之解释器模式
- 23种设计模式C++实例之解释器模式
- 设计模式---解释器模式(C++实现)
- 设计模式C++实现-解释器模式
- 设计模式C++描述----07.建造者(Builder)模式
- 设计模式C++描述----13.代理(Proxy)模式
- 设计模式C++描述----14.外观(Facade)模式
- 设计模式C++描述__职责链(Chain of Responsibility)模式
- C++设计模式之解释器模式
- C++设计模式——解释器模式
- 设计模式C++描述----20.迭代器(Iterator)模式