美文网首页
解释器模式

解释器模式

作者: yuzhiyi_宇 | 来源:发表于2019-03-14 15:31 被阅读0次

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

    解释器模式的结构图

    解释器模式中的角色:

    • Context:包含解释器之外的一些全局信息
    • AbstractExpression:抽象表达式,声明一个抽象的解释操作,这个接口为抽象语法树中所有的结点所共享。
    • TerminalExpression:终结符表达式,实现与文法中的终结符相关联的解释操作。
    • NonterminalExpression:非终结符表达式,为文法中的非终结符号,为文法中的非终结符实现解释操作。对文法中每一条规则 R1、R2...Rm 都需要一个具体的非终结符表达式类。

    解释器模式的简单实现

    (1)Context 类

    public class Client {
    
        public static void main(String[] args) {
            Context context = new Context();
            List<AbstractExpression> abstractExpressionList = new ArrayList<>();
            abstractExpressionList.add(new TerminalExpression());
            abstractExpressionList.add(new NonterminalExpression());
            abstractExpressionList.add(new TerminalExpression());
            abstractExpressionList.add(new TerminalExpression());
    
            for (AbstractExpression abstractExpression : abstractExpressionList) {
                abstractExpression.interpret(context);
            }
        }
    }
    

    (2)抽象表达式

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

    (3)终结符表达式

    public class TerminalExpression extends AbstractExpression {
    
        @Override
        public void interpret(Context context) {
            System.out.println("终端解释器");
        }
    }
    

    (4)非终结符表达式

    public class NonterminalExpression extends AbstractExpression {
    
        @Override
        public void interpret(Context context) {
            System.out.println("非终端解释器");
        }
    }
    

    解释器模式的应用场景

    应用场景:
    当语言的文法较为简单,且执行效率不是关键问题时。
    当问题重复出现,且可以用一种简单的语言来进行表达时。
    当一个语言需要解释执行,并且语言中的句子可以表示为一个抽象语法树的时候,如 XML 文档解释。

    解释器模式的优缺点

    优点:
    可扩展性比较好,灵活。
    增加了新的解释表达式的方式。
    易于实现文法。

    缺点:
    执行效率比较低,可利用场景比较少。
    对于复杂的文法比较难维护。

    相关文章

      网友评论

          本文标题:解释器模式

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