解释器模式用于描述如何构成一个简单的语言解释器,主要应用于使用面向对象语言开发的解释器的设计。
解释器模式的定义:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
在解释器模式的定义中所指的“语言”是使用规定格式和语法的代码,解释器模式是一种类行为型模式。
解释器模式的结构与实现:
1.AbstractExpression(抽象表达式):在抽象表达式中声明了抽象的解释操作,它是所有终结符表达式和非终结符表达式的公共父类。
public abstract class AbstractExpression {
public abstract void interpreter(Context context);
}
2.TerminatorExpression(终结符表达式):终结符表达式是抽象表达式的子类,它实现了与文法中的终结符相关联的解释操作,在句子中的每一个终结符都是该类的一个实例。通常在一个解释器模式中只有少数几个终结符表达式,它们的实例可以通过非终结符表达式组成较为复杂的句子。
public class TerminatorExpression extends AbstractExpression {
@Override
public void interpreter(Context context) {
//解释操作
}
}
3.NonterminalExpression(非终结符表达式):非终结符表达式也是抽象表达式的子类,它实现了文法中非终结符的解释操作,由于在非终结符表达式中可以包含终结符表达式,也可以继续包含非终结符表达式,因此其解释操作一般通过递归的方式完成。
public class NonterminalExpression extends AbstractExpression {
private AbstractExpression left;
private AbstractExpression right;
public NonterminalExpression(AbstractExpression left,AbstractExpression right) {
this.left=left;
this.right=right;
}
@Override
public void interpreter(Context context) {
//递归调用每一个组成部分的解释操作方法interpreter方法
Context leftContext=new Context();
Context rightContext=new Context();
left.interpreter(leftContext);
right.interpreter(rightContext);
}
}
4.Context(环境类):环境类又称为上下文类,用于存储解释器之外的一些全局信息,通常它临时储存了需要解释的语句。
public class Context {
private HashMap<String, String> map=new HashMap<>();
public void assign(String key,String value) {
//向环境类中传入内容
map.put(key, value);
}
public String lookup(String key) {
//获取内容
return map.get(key);
}
}
网友评论