zoukankan      html  css  js  c++  java
  • 解释器模式

    解释器模式

    一、简介

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

    该模式涉及的编程语言理论知识较多,实际运用并不常见。主要用在 SQL 解析、符号处理引擎等

    二、简单实现

    这里以对算数表达式的解释为例。

    //抽象解释器
    public abstract class ArithmeticExpression{
        public abstract int interpret();
    }
    
    //数字解释器
    public class NumberExpression extends ArithmeticExpression{
        private int num;
    
        public NumberExpression(int num) {
            this.num = num;
        }
    
        @Override
        public int interpret() {
            return num;
        }
    }
    //运算符抽象解释器
    public abstract class OperatorExpression extends ArithmeticExpression{
        protected ArithmeticExpression exp1,exp2;
    
        public OperatorExpression(ArithmeticExpression exp1, ArithmeticExpression exp2) {
            this.exp1 = exp1;
            this.exp2 = exp2;
        }
    }
    
    //加法解释器
    public class AddExpression extends OperatorExpression{
    
        public AddExpression(ArithmeticExpression exp1, ArithmeticExpression exp2) {
            super(exp1, exp2);
        }
    
        @Override
        public int interpret() {
            return exp1.interpret()+exp2.interpret();
        }
    }
    
    public class Calculator{
        private Stack<ArithmeticExpression> stack=new Stack<>();
    
        public Calculator(String expression ) {
            ArithmeticExpression exp1,exp2;
            
            String [] elements=expression.split(" ");
    
            for (int i = 0; i < elements.length; i++) {
                switch (elements[i].charAt(0)){
                    case '+':
                        exp1=stack.pop();
                        exp2=new NumberExpression(Integer.valueOf(elements[++i]));
                        stack.push(new AddExpression(exp1,exp2));
                        break;
                    default:
                        stack.push(new NumberExpression(Integer.valueOf(elements[i])));
                        break;
                }
            }
        }
        
        public int calculate(){
            return stack.pop().interpret();
        }
    }
    
  • 相关阅读:
    图解插入排序--直接插入排序
    在项目中代替DevExpress(一)
    java web servlet
    一元夺宝项目设计(上)
    一元夺宝项目设计(中)
    一元夺宝项目设计(下)
    ORM之四:调用入口与调用示例
    ORM之三:DbProvider与DbFactory
    ORM之二:核心接口与扩展操作
    ORM之一:适合我的ORM
  • 原文地址:https://www.cnblogs.com/Robin132929/p/13794965.html
Copyright © 2011-2022 走看看