码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-07-22 09:14:11      阅读:87      评论:0      收藏:0      [点我收藏+]

标签:

结构 技术分享
意图 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
适用性
  • 当有一个语言需要解释执行, 并且你可将该语言中的句子表示为一个抽象语法树时,可使用解释器模式。而当存在以下情况时该模式效果最好:
  • 该文法简单对于复杂的文法, 文法的类层次变得庞大而无法管理。此时语法分析程序生成器这样的工具是更好的选择。它们无需构建抽象语法树即可解释表达式, 这样可以节省空间而且还可能节省时间。
  • 效率不是一个关键问题最高效的解释器通常不是通过直接解释语法分析树实现的, 而是首先将它们转换成另一种形式。例如,正则表达式通常被转换成状态机。但即使在这种情况下, 转换器仍可用解释器模式实现, 该模式仍是有用的。

 

技术分享
 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     }
解释器模式

 

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

标签:

原文地址:http://www.cnblogs.com/ziranquliu/p/4666218.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!