科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道C#设计模式之Interpreter

C#设计模式之Interpreter

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

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

作者:ghost 来源:CSDN 2007年9月24日

关键字: ghost C# 设计模式 Interpreter

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

    class Context
    {
        
    }

    abstract class AbstractExpression
    {
        abstract public void Interpret(Context c);
    }

    // class for terminal symbol
    class TerminalExpression : AbstractExpression
    {
        override public void Interpret(Context c)
        {
            
        }
    }

    // class for grammar rule (one per rule needed)
    class NonterminalExpression : AbstractExpression
    {
        override public void Interpret(Context c)
        {
            
        }
    }
    // to extend grammar, just add other NonterminalExpression classes

    /// <summary>
    /// Summary description for Client.
    /// </summary>
    public class Client
    {
        public static int Main(string[] args)
        {
            Context c = new Context();
            ArrayList l = new ArrayList(); //really need a tree here!

            // build up context information
            // . . .

            // Populate abstract syntax tree with data
            l.Add(new TerminalExpression());
            l.Add(new NonterminalExpression());

            // interpret
            foreach (AbstractExpression exp in l)
            {
                exp.Interpret(c);
            }
                    
            return 0;
        }
    }
}


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1681412

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章