解释器模式c语言_解释器模式的优点_解释器模式用处(3)

电脑杂谈  发布时间:2017-02-23 07:39:51  来源:网络整理
package com.interpreter;

//抽象表达式,定义一个解释操作
public intece Expression {

	void interpreter(Context context);
	
}

下面便是最重要的四个具体表达式了,这其中对应于上面文法提到的终结符和非终结符,如下。

package com.interpreter;

//算数表达式(非终结符表达式,对应arithmetic)
public class ArithmeticExpression implements Expression {

	public void interpreter(Context context) {
		context.setResult(getResult(context));//计算结果
		context.getOperateNumbers().clear();//清空操作数
		context.setLeftOperateNumber(context.getResult());//将结果压入左操作数
	}

	private int getResult(Context context){
		int result = 0;
		switch (context.getOperator()) {
		case '+':
			result = context.getOperateNumbers().get(0) + context.getOperateNumbers().get(1);
			break;
		case '-':
			result = context.getOperateNumbers().get(0) - context.getOperateNumbers().get(1);
			break;
		default:
			break;
		}
		return result;
	}
	
}
package com.interpreter;

//非终结符表达式,对应number
public class NumberExpression implements Expression{

	public void interpreter(Context context) {
		//设置操作数
		Integer operateNumber = Integer.valueOf(String.valueOf(context.current()));
		if (context.getOperateNumbers().size() == 0) {
			context.setLeftOperateNumber(operateNumber);
			context.setResult(operateNumber);
		}else {
			context.setRightOperateNumber(operateNumber);
			Expression expression = new ArithmeticExpression();//转换成算数表达式
			expression.interpreter(context);
		}
	}

}
package com.interpreter;

//终结符表达式,对应-、+
public class OperatorExpression implements Expression{

	public void interpreter(Context context) {
		context.setOperator(context.current());//设置运算符
	}
	
}


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-34001-3.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 包佶
      包佶

      首先是判明其意图和性质

    热点图片
    拼命载入中...