• 行为型设计模式之解释器模式(Interpreter)


    结构
    意图 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
    适用性
    • 当有一个语言需要解释执行, 并且你可将该语言中的句子表示为一个抽象语法树时,可使用解释器模式。而当存在以下情况时该模式效果最好:
    • 该文法简单对于复杂的文法, 文法的类层次变得庞大而无法管理。此时语法分析程序生成器这样的工具是更好的选择。它们无需构建抽象语法树即可解释表达式, 这样可以节省空间而且还可能节省时间。
    • 效率不是一个关键问题最高效的解释器通常不是通过直接解释语法分析树实现的, 而是首先将它们转换成另一种形式。例如,正则表达式通常被转换成状态机。但即使在这种情况下, 转换器仍可用解释器模式实现, 该模式仍是有用的。
     1 using System;
     2     using System.Collections;
     3 
     4     class Context 
     5     {
     6         
     7     }
     8 
     9     abstract class AbstractExpression 
    10     {
    11         abstract public void Interpret(Context c);
    12     }
    13 
    14     // class for terminal symbol
    15     class TerminalExpression : AbstractExpression
    16     {
    17         override public void Interpret(Context c)    
    18         {
    19             
    20         }
    21     }
    22 
    23     // class for grammar rule (one per rule needed)
    24     class NonterminalExpression : AbstractExpression
    25     {
    26         override public void Interpret(Context c)    
    27         {
    28             
    29         }    
    30     }
    31     // to extend grammar, just add other NonterminalExpression classes
    32 
    33     /// <summary>
    34     ///    Summary description for Client.
    35     /// </summary>
    36     public class Client
    37     {
    38         public static int Main(string[] args)
    39         {
    40             Context c = new Context();
    41             ArrayList l = new ArrayList(); //really need a tree here!
    42 
    43             // build up context information 
    44             // . . .
    45 
    46             // Populate abstract syntax tree with data
    47             l.Add(new TerminalExpression());
    48             l.Add(new NonterminalExpression());
    49 
    50             // interpret
    51             foreach (AbstractExpression exp in l)
    52             {
    53                 exp.Interpret(c);
    54             }
    55                     
    56             return 0;
    57         }
    58     }
    解释器模式
  • 相关阅读:
    MVC4 @helper辅助方法
    Razor的主版页面框架
    Razor与HTML混合输出陷阱与技巧
    MVC4 razor与aspx的区别以及用法
    loj6100 「2017 山东二轮集训 Day1」第一题
    loj6087 毒瘤题
    「6月雅礼集训 2017 Day2」C
    「6月雅礼集训 2017 Day2」B
    「6月雅礼集训 2017 Day2」A
    「6月雅礼集训 2017 Day1」看无可看
  • 原文地址:https://www.cnblogs.com/ziranquliu/p/4666218.html
Copyright © 2020-2023  润新知