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

时间:2021-04-01 17:06:56


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

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

 

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


C++实现:

[cpp] view plaincopyprint?c++设计模式--解释器模式c++设计模式--解释器模式
  1. #include <iostream>  
  2.   
  3. #include <vector>  
  4.   
  5. #include <string>  
  6.   
  7. using namespace std;  
  8.   
  9.    
  10.   
  11. class Context  
  12.   
  13. {  
  14.   
  15. public:  
  16.   
  17. string input;  
  18.   
  19. string output;  
  20.   
  21. };  
  22.   
  23.    
  24.   
  25. class AbstractExpression  
  26.   
  27. {  
  28.   
  29. public:  
  30.   
  31. virtual void Interpret(Context* context) = 0;  
  32.   
  33. };  
  34.   
  35.    
  36.   
  37. class Expression : public AbstractExpression  
  38.   
  39. {  
  40.   
  41. public:  
  42.   
  43. virtual void Interpret(Context* context) { cout << "终端解释器" << endl; }  
  44.   
  45. };  
  46.   
  47.    
  48.   
  49. class NonTerminalExpression : public AbstractExpression  
  50.   
  51. {  
  52.   
  53. public:  
  54.   
  55. virtual void Interpret(Context* context) { cout << "非终端解释器" << endl; }  
  56.   
  57. };  
  58.   
  59.    
  60.   
  61. int main(int argc, char* argv[])  
  62.   
  63. {  
  64.   
  65. Context* context = new Context();  
  66.   
  67. vector<AbstractExpression*> express;  
  68.   
  69. express.push_back(new Expression());  
  70.   
  71. express.push_back(new NonTerminalExpression());  
  72.   
  73. express.push_back(new NonTerminalExpression());  
  74.   
  75.   
  76.   
  77. vector<AbstractExpression*>::iterator it;  
  78.   
  79. for (it=express.begin(); it!=express.end(); ++it)  
  80.   
  81. {  
  82.   
  83. (*it)->Interpret(context);  
  84.   
  85. }  
  86.   
  87.   
  88.   
  89. return 0;  
  90.   
  91. }