• 解释器模式


    解释器模式

    一、简介

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

    该模式涉及的编程语言理论知识较多,实际运用并不常见。主要用在 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();
        }
    }
    
  • 相关阅读:
    tomcat快速部署脚本
    Centos7下搭建单节点Zookeeper
    request的基本使用用法
    Centos7 下配置jdk
    oracle备份脚本(以日期命名文件夹)
    Centos7 关闭防火墙
    Centos7 配置静态ip地址
    杀死占用8080端口的进程
    git clone的时候遇到“Please make sure you have the correct access rights and the repository exists”
    【笔记】关于多分类问题中的混淆矩阵,精准率
  • 原文地址:https://www.cnblogs.com/Robin132929/p/13794965.html
Copyright © 2020-2023  润新知