您的位置:首页 > 编程语言 > Java开发

解释器模式(Interpreter)Java

2016-05-31 14:24 155 查看

定义:

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

结构图:



AbstractExpression解释器模式抽象类

package ding.study.designpatterns.interpreter;
/**
* 解释器模式抽象类
* - 声明一个抽象的Interpret方法,抽象语法树中所有的节点都必须实现该抽象方法。
* @author daniel
*
*/
abstract class AbstractExpression {
//解释方法
public abstract void interpret(Context context);

}

Context解释器之外的一些全局信息

package ding.study.designpatterns.interpreter;

/**
* 解释器之外的一些全局信息
* Interpreter方法所需要的信息的容器,该信息对Interpreter而言全局可见。充当几个AbstractExpresssion
* 实例之间的通讯频道。
*
* @author daniel
*
*/
public class Context {
private String input;
private String output;

/**
* @return the output
*/
public String getOutput() {
return output;
}

/**
* @param output
* the output to set
*/
public void setOutput(String output) {
this.output = output;
}

/**
* @return the input
*/
public String getInput() {
return input;
}

/**
* @param input
* the input to set
*/
public void setInput(String input) {
this.input = input;
}

}

NonterminalExpression非终端解释器

package ding.study.designpatterns.interpreter;

/**
* 非终端解释器 另外一个实现了AbstractExpression
* 接口的类,用来处理语法树中非末端节点的语法。它含有下一个AbstractExpression(s)的引用,调用它每个子节点的Interpret方法。
*
* @author daniel
*
*/
public class NonterminalExpression extends AbstractExpression {

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

}

TerminalExpression终端解释器

package ding.study.designpatterns.interpreter;
/**
* 终端解释器
* - 实现和语法中末端符号相关的Interpret方法。
- 在每个句子的末端符号中均需要一个TerminalExpression实例。
* @author daniel
*
*/
public class TerminalExpression extends AbstractExpression {

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

}

}

Client  客户端 ZTestMain

package ding.study.designpatterns.interpreter;

import java.util.ArrayList;
import java.util.List;
/**
* 解释器模式(interpreter):给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
*
* 输出:
* 终端解释器
非终端解释器
终端解释器
终端解释器

*
* @author daniel
* @email 576699909@qq.com
* @time 2016-5-31 下午2:16:37
*/
public class ZTestMain {

/**
* @param args
*/
public static void main(String[] args) {
Context context = new Context();
List<AbstractExpression> list = new ArrayList<AbstractExpression>();
list.add(new TerminalExpression());
list.add(new NonterminalExpression());
list.add(new TerminalExpression());
list.add(new TerminalExpression());
for (AbstractExpression exp : list) {
exp.interpret(context);
}

}

}

执行结果



源代码

https://github.com/dingsai88/StudyTest/tree/master/src/ding/study/designpatterns/interpreter
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: