zoukankan      html  css  js  c++  java
  • 设计模式C++描述----21.解释器(Iterpreter)模式

    一. 解释器模式

    定义:给定一个语言,定义它的文法的一种表示,并定一个解释器,这个解释器使用该表示来解释语言中的句子

    结构如下:

    代码如下:

    1. //包含解释器之外的一些全局信息  
    2. class Context   
    3. {   
    4. public:   
    5.     Context() {}  
    6.   
    7.     ~Context() {}  
    8. };  
    9.   
    10.   
    11. class AbstractExpression   
    12. {   
    13. public:   
    14.     virtual ~AbstractExpression() {}  
    15.   
    16.     virtual void Interpret(const Context& c) {}  
    17.   
    18. protected:   
    19.     AbstractExpression() {}  
    20. };  
    21.   
    22. //终结符表达式  
    23. class TerminalExpression:public AbstractExpression   
    24. {  
    25. public:   
    26.     TerminalExpression(const string& statement)  
    27.     {  
    28.         this->_statement = statement;  
    29.     }  
    30.   
    31.     ~TerminalExpression(){}  
    32.   
    33.     void Interpret(const Context& c)  
    34.     {  
    35.         cout<<this->_statement<<" Terminal Expression..."<<endl;   
    36.     }  
    37.   
    38. private:   
    39.     string _statement;   
    40. };  
    41.   
    42. //非终结符表达式      
    43. class NonterminalExpression:public AbstractExpression   
    44. {   
    45. public:   
    46.     NonterminalExpression(const string& statement)  
    47.     {  
    48.         this->_statement = statement;  
    49.     }  
    50.                    
    51.     ~NonterminalExpression() {}  
    52.   
    53.     void Interpret(const Context& c)  
    54.     {  
    55.         cout<<this->_statement<<" Nonterminal Expression..."<<endl;   
    56.     }  
    57.   
    58. private:  
    59.     string _statement;   
    60. };  
    61.   
    62.   
    63. //测试代码  
    64. int main(int argc,char* argv[])  
    65. {   
    66.     Context* c = new Context();  
    67.       
    68.     list<AbstractExpression*> ls;  
    69.   
    70.     ls.push_back(new TerminalExpression("A"));  
    71.     ls.push_back(new NonterminalExpression("B"));  
    72.     ls.push_back(new TerminalExpression("C"));  
    73.     ls.push_back(new NonterminalExpression("D"));  
    74.   
    75.     list<AbstractExpression*>::iterator it = ls.begin();  
    76.     for (it; it != ls.end(); ++it)  
    77.     {  
    78.         (*it)->Interpret(*c);  
    79.     }  
    80.   
    81.     return 0;   
    82. }  


    二. 说明

    解释器模式就是用“迷你语言”来表现程序要解决的问题。

    比如:在C语言解释器,当你输入 int 时,解释器就能正确的开辟一个 int 的空间出来。

    再比如: linux 下常用的命令参数,如 ls -a,-a 就能被正确的解释成相应的命令。

    优点:这种模式很容易改变和扩展文法,因为每个文法有一个文法类,也就是上面的表达式类。

    缺点:当文法非常复杂时,要管理和维护很多个文法类。

  • 相关阅读:
    django quick start
    LiveWriter插入高亮代码插件介绍 基于SyntaxHighighter
    自动填充脚本使用及注意事项
    连接池错误
    Python3.3官方教程中文翻译1:开胃菜
    [译]科学计算可视化在andriod与ios实现的工具
    EXTGWT、GWT与EXTJS之间的关系
    Python3.3官方教程中文翻译2:使用Python解释器
    SAS9.1.3安装过程中反复出现重启动挂起的解决方案
    Sqlite 插入数据异常(乱码),看看是不是数据类型的错误
  • 原文地址:https://www.cnblogs.com/any91/p/3248023.html
Copyright © 2011-2022 走看看