解释器模式

解释器模式

一、简介

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

该模式涉及的编程语言理论知识较多,实际运用并不常见。主要用在 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();
    }
}
posted @ 2020-10-10 19:59  Robin132929  阅读(8)  评论(0编辑  收藏