解释器模式(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(); }