解释器模式

解释器模式(interpreter):给定一个语言,定义它的方法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

Context命令类,包含解释器之外的一些全局信息。

    class Context
    {
        private string _input;
        public string Input
        {
            get { return _input; }
            set { _input = value; }
        }

        private string _output;
        public string Output
        {
            get { return _output; }
            set { _output = value; }
        }
    }

AbstractExpression抽象类(抽象表达式)

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

TerminalExpression(终结表达式),实现与方法中的终结符相关联的解释操作。实现抽象表达式中所要求的接口,主要是一个interpret()方法。方法中每一个终结符都有一个具体终结表达式与之相对应。

    class TerminalExpression : AbstractExpression
    {
        public override void Interpret(Context context)
        {
            Console.WriteLine("终端解释器");
        }
    }

NonterminalExpression(非终结表达式),为方法中的非终结符实现解释操作。对方法中每一条规则R1、R2......Rn都需要一个具体的非终结符表达式类。通过实现抽象表达式的interpret()方法实现解释操作。解释操作以递归方法调用上面所提到的代表R1、R2......Rn中各个符号的实例变量。

    class NonterminalExpression : AbstractExpression
    {
        public override void Interpret(Context context)
        {
            Console.WriteLine("非终端解释器");
        }
    }

客户端代码

        static void Main(string[] args)
        {
            Context context = new Context();
            IList<AbstractExpression> list = new List<AbstractExpression>();
            list.Add(new TerminalExpression());
            list.Add(new NonterminalExpression());

            foreach (var exp in list)
            {
                exp.Interpret(context);
            }

            Console.ReadKey();
        }
原文地址:https://www.cnblogs.com/baiqjh/p/2846439.html