首页 > 其他分享 >InterpreterPattern-解释器模式

InterpreterPattern-解释器模式

时间:2023-08-21 19:56:22浏览次数:37  
标签:解释器 Dictionary 模式 Add InterpreterPattern Context Expression public

在C#中,解释器模式(Interpreter Pattern)是一种行为型设计模式,它定义了一种语言和解释器之间的关系,使得用户可以使用特定的语法解释表达式或操作。

解释器模式有以下几个关键角色:

AbstractExpression(抽象表达式):定义了解释器的抽象方法,所有具体表达式的共同父类。在C#中,可以使用抽象类或接口来实现。

TerminalExpression(终结符表达式):表示语法中的终结符,不再进行进一步解释。通常使用叶子节点来表示。

NonterminalExpression(非终结符表达式):表示语法中的非终结符,需要进一步解释。通常使用非叶子节点来表示。

Context(上下文):包含解释器需要的一些全局信息或状态。可以在解释器中传递和共享上下文。

namespace InterpreterPattern_解释器模式
{
    /// <summary>
    /// 转义字符库
    /// </summary>
    public class TransferredMeaning
    {
        /// <summary>
        /// 资源字典
        /// </summary>
        private static Dictionary<string, string> _Dictionary = new Dictionary<string, string>();
        static TransferredMeaning()
        {
            _Dictionary.Add("1", "A");
            _Dictionary.Add("2", "B");
            _Dictionary.Add("3", "C");
            _Dictionary.Add("4", "D");
            _Dictionary.Add("5", "E");
            _Dictionary.Add("6", "F");
            _Dictionary.Add("7", "G");
            _Dictionary.Add("8", "H");
            _Dictionary.Add("9", "I");
            _Dictionary.Add("10", "J");
        }
        /// <summary>
        /// 获取转义后的字符
        /// </summary>
        /// <param name="str">输入字符</param>
        /// <returns></returns>
        public static String Conversion(String str)
        {
            return _Dictionary[str];
        }
    }
    /// <summary>
    /// 抽象表达式
    /// </summary>
    public abstract class Expression
    {
        public abstract string Interpret(Context context);
    }

    /// <summary>
    /// 终结符表达式
    /// </summary>
    public class NumberExpression : Expression
    {
        private string number;

        public NumberExpression(string number)
        {
            this.number = number;
        }

        public override string Interpret(Context context)
        {
            return TransferredMeaning.Conversion(number);
        }
    }

    /// <summary>
    /// 非终结符表达式
    /// </summary>
    public class AddExpression : Expression
    {
        private Expression left;
        private Expression right;

        public AddExpression(Expression left, Expression right)
        {
            this.left = left;
            this.right = right;
        }
        /// <summary>
        /// 计算
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public override string Interpret(Context context)
        {
            return left.Interpret(context) + right.Interpret(context);
        }
    }
    // Context
    public class Context
    {
        // 可以在此处添加一些全局信息或状态
    }
    internal class Program
    {
        static void Main(string[] args)
        {
            // 构造解析表达式的语法树
            Expression expression = new AddExpression(
                new NumberExpression("5"),
                new AddExpression(
                    new NumberExpression("10"),
                    new NumberExpression("2")
                )
            );

            Context context = new Context();

            // 解释并计算表达式结果
            string result = expression.Interpret(context);

            Console.WriteLine("Result: " + result);  // 输出:EJB
            Console.Read();
        }
    }
}

解释器模式适用于需要处理复杂语言或规则的场景。它通过构建一个抽象的语法树,将语法的解释和运算分离开来,使得系统更加灵活和易于扩展。但需要注意的是,解释器模式可能会导致语法树变得非常庞大和复杂,从而影响性能。因此,在使用解释器模式时需要权衡设计的复杂性和系统的性能要求。

标签:解释器,Dictionary,模式,Add,InterpreterPattern,Context,Expression,public
From: https://www.cnblogs.com/ZHIZRL/p/17646927.html

相关文章

  • ProxyPattern-代理模式
    在C#中,代理模式(ProxyPattern)是一种结构型设计模式,它允许通过创建一个代理对象来控制对其他对象的访问。代理对象充当着客户端和被代理对象之间的中间层,可以在访问对象时添加额外的功能,例如权限验证、延迟加载等。代理模式有以下几个关键角色:Subject(主题):定义了代理对象和真实对......
  • 深入理解MVVM架构模式
    MVVM原理MVVM是一种用于构建用户界面的软件架构模式,它的名称代表着三个组成部分:Model(模型)、View(视图)和ViewModel(视图模型)。MVVM的主要目标是将应用程序的UI与其底层数据模型分离,通过数据绑定实现数据和UI的自动同步,从而降低代码的耦合度,提高应用程序的可维护性和可测试性。MVVM框架......
  • LVS负载均衡之DR模式构建
    ※实验环境(1)系统:centos7.9(2)虚拟机:4台centos7.9,1台作为nfs共享服务器(NFS共享服务搭建步骤)一、负载调度器配置(1)关闭selinux、firewalld、NetworkManager#关闭selinuxsed-i's/SELINUX=enforcing/SELINUX=disabled/'/etc/selinux/config#关闭firewalldsystemctlstopfirewalld......
  • LVS负载均衡之DR模式构建
    ※实验环境(1)系统:centos7.9(2)虚拟机:4台centos7.9,1台作为nfs共享服务器(NFS共享服务搭建步骤)一、负载调度器配置(1)关闭selinux、firewalld、NetworkManager#关闭selinuxsed-i's/SELINUX=enforcing/SELINUX=disabled/'/etc/selinux/config#关闭firewalldsystemctlstopfirewalld......
  • 【Java设计模式005】代理模式
    概述大家好,个人gzh是大猪和小猪的小家,我们的gzh是朝阳三只大明白,满满全是干货,分享近期的学习知识以及个人总结(包括读研和IT),跪求一波关注,希望和大家一起努力、进步!!由于一些特定原因某些对象不适合或者不能直接引用目标对象,这时就可以使用代理模式。代理模式为目标对象提供一个代理以......
  • 复杂工厂模式
    目录前言导语代码部分前言我是歌谣歌谣的意志是永恒的放弃很容易但是坚持一定很酷导语复杂工厂模式编辑代码部分```//第一步定义自行车的构造函数两个属性一个name和一个方法methodvarBicycleShop=function(name){this.name=name;this.method=function(){return......
  • 单体模式
    目录前言导语 代码部分总结前言我是歌谣歌谣的意志是永恒的放弃很容易但是坚持一定很酷导语单体模式 编辑 代码部分//单体模式varSingleton=function(name){this.name=name;};Singleton.prototype.getName=function(){returnthis.name;}//获取实例对象......
  • Linux第四章(80X86保护模式及其编程)
    80X86保护模式及其编程80X86基础知识保护模式内存管理各种保护措施中断和异常处理任务管理保护模式编程的初始化一个简单的多任务内核4.180X86系统寄存器和系统指令为了协助处理执行初始化和控制系统操作,80X86提供了一个标志寄存器EFLAGS和几个系统寄存器,除了一些通......
  • 拼多多海外版Temu商业模式分析
    拼多多于2022年9月在美国上线跨境平台Temu,发布仅2个月就成为北美下载量最高的应用程序,持续霸榜。这篇文章帮你快速了解下Temu:商业模式如何竞争情况如何有哪些优势和挑战后期业务如何发展一、Temu商业模式Temu平台拥有对商品的最终定价权,通过商品销售获取收入,商......
  • 论文解读:《ccctc结合因子介导的染色质环形成序列模式的深度学习》
    所属分类:SCI  生物期刊名: JOURNALOFCOMPUTATIONALBIOLOGY2021年影响因子/JCR分区:1.479/Q4文章:DeepLearningofSequencePatternsforCCCTC-BindingFactor-MediatedChromatinLoopFormation|JournalofComputationalBiology代码与数据集:GitHub-BioDataLearning/......