美文网首页
java设计模式15(解释器模式)

java设计模式15(解释器模式)

作者: 刺风有道 | 来源:发表于2019-08-08 22:12 被阅读0次

    解释器模式用于描述如何构成一个简单的语言解释器,主要应用于使用面向对象语言开发的解释器的设计。

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

    在解释器模式的定义中所指的“语言”是使用规定格式和语法的代码,解释器模式是一种类行为型模式。

    解释器模式的结构与实现:
    1.AbstractExpression(抽象表达式):在抽象表达式中声明了抽象的解释操作,它是所有终结符表达式和非终结符表达式的公共父类。

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

    2.TerminatorExpression(终结符表达式):终结符表达式是抽象表达式的子类,它实现了与文法中的终结符相关联的解释操作,在句子中的每一个终结符都是该类的一个实例。通常在一个解释器模式中只有少数几个终结符表达式,它们的实例可以通过非终结符表达式组成较为复杂的句子。

    public class TerminatorExpression extends AbstractExpression {
    
        @Override
        public void interpreter(Context context) {
            //解释操作
        }
    
    }
    

    3.NonterminalExpression(非终结符表达式):非终结符表达式也是抽象表达式的子类,它实现了文法中非终结符的解释操作,由于在非终结符表达式中可以包含终结符表达式,也可以继续包含非终结符表达式,因此其解释操作一般通过递归的方式完成。

    public class NonterminalExpression extends AbstractExpression {
        
        private AbstractExpression left;
        
        private AbstractExpression right;
        
        public NonterminalExpression(AbstractExpression left,AbstractExpression right) {
            this.left=left;
            this.right=right;
        }
    
        @Override
        public void interpreter(Context context) {
            //递归调用每一个组成部分的解释操作方法interpreter方法
            Context leftContext=new Context();
            Context rightContext=new Context();
            left.interpreter(leftContext);
            right.interpreter(rightContext);
        }
    
    }
    

    4.Context(环境类):环境类又称为上下文类,用于存储解释器之外的一些全局信息,通常它临时储存了需要解释的语句。

    public class Context {
    
        private HashMap<String, String> map=new HashMap<>();
        
        public void assign(String key,String value) {
            //向环境类中传入内容
            map.put(key, value);
        }
        
        
        public String lookup(String key) {
            //获取内容
            return map.get(key);
        }
    }
    

    相关文章

      网友评论

          本文标题:java设计模式15(解释器模式)

          本文链接:https://www.haomeiwen.com/subject/cqllaqtx.html