一,Interpreter使用面不是很广,描述了一个语言解释器是怎么构成的,在实际应用中,我们可能很少去构造一个语言的解释器.
没在平常使用中发现例子,故以java与模式一书中的例子为例。。。
这个例子是针对 与,或,非提供的一套解析器
提供一个实现的环境
import java.util.HashMap;
import java.util.Map;
/**
*提供一个boolean环境,用于作判断
* @author wu_quanyin(09817)
* @version 1.0
* @date Jul 9, 2010 9:39:24 PM
*/
public class Context {
private Map map=new HashMap();
public void assign(Variable var,boolean value){
map.put(var, new Boolean(value));
}
public boolean lookup(Variable var)throws IllegalAccessException{
Boolean value=(Boolean)map.get(var);
if(value==null){
throw new IllegalAccessException();
}
return value.booleanValue();
}
}
解析器的接口
/**
*进行and or !操作的抽象
*
* @author wu_quanyin(09817)
* @version 1.0
* @date Jul 9, 2010 9:36:54 PM
*/
public interface Expression {
//用于判断操作
public boolean interpret(Context ctx);
public boolean equals(Object o);
public int hashCode();
public String toString();
}
//And的操作
/**
* i与操作
* @author wu_quanyin(09817)
* @version 1.0
* @date Jul 9, 2010 9:47:12 PM
*/
public class And implements Expression {
private Expression left,right;
public And(Expression left,Expression right){
this.left=left;
this.right=right;
}
public boolean interpret(Context ctx) {
// TODO Auto-generated method stub
return left.interpret(ctx)&&right.interpret(ctx);
}
public boolean equals(Object o){
if(o!=null&&o instanceof And){
return this.left.equals(((And)o).left)&&this.right.equals(((And)o).right);
}
return false;
}
public int hashCode(){
return(this.toString()).hashCode();
}
public String toString(){
return "("+left.toString()+"AND"+right.toString()+")";
}
}
//or操作
/**
* 或操作
*
* @author wu_quanyin(09817)
* @version 1.0
* @date Jul 9, 2010 9:53:04 PM
*/
public class Or implements Expression {
private Expression left, right;
public Or(Expression left, Expression right) {
this.left = left;
this.right = right;
}
public boolean interpret(Context ctx) {
// TODO Auto-generated method stub
return left.interpret(ctx) || right.interpret(ctx);
}
public boolean equals(Object o) {
if (o != null && o instanceof Or) {
return this.left.equals(((Or) o).left)
|| this.right.equals(((Or) o).right);
}
return false;
}
public int hashCode() {
return (this.toString()).hashCode();
}
public String toString() {
return "(" + left.toString() + "OR" + right.toString() + ")";
}
}
//Not操作
/**
* 非操作
* @author wu_quanyin(09817)
* @version 1.0
* @date Jul 9, 2010 9:40:35 PM
*/
public class Constant implements Expression{
private boolean value;
public Constant(boolean value){
this.value=value;
}
public boolean interpret(Context ctx) {
return value;
}
public boolean equals(Object o){
if(o!=null&&o instanceof Constant){
return this.value==((Constant)o).value;
}
return false;
}
public int hashCode(){
return(this.toString()).hashCode();
}
public String toString(){
return new Boolean(value).toString();
}
}
//-----------------------为其提供操作的类型Variable Constant
Variable
/**
* 使用相应的名称到context中进行查找
* @author wu_quanyin(09817)
* @version 1.0
* @date Jul 9, 2010 9:44:36 PM
*/
public class Variable implements Expression {
private String name;
public Variable(String name){
this.name=name;
}
public boolean interpret(Context ctx) {
try {
return ctx.lookup(this);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return false;
}
public boolean equals(Object o){
if(o!=null&&o instanceof Constant){
return this.name.equals(((Variable)o).name);
}
return false;
}
public int hashCode(){
return(this.toString()).hashCode();
}
public String toString(){
return name;
}
}
//Constant
/**
* 返回固定类型
* @author wu_quanyin(09817)
* @version 1.0
* @date Jul 9, 2010 9:40:35 PM
*/
public class Constant implements Expression{
private boolean value;
public Constant(boolean value){
this.value=value;
}
public boolean interpret(Context ctx) {
return value;
}
public boolean equals(Object o){
if(o!=null&&o instanceof Constant){
return this.value==((Constant)o).value;
}
return false;
}
public int hashCode(){
return(this.toString()).hashCode();
}
public String toString(){
return new Boolean(value).toString();
}
}
//------------------------------------test
可在此对and or not进行任意的操作
/**
*
* @author wu_quanyin(09817)
* @version 1.0
* @date Jul 9, 2010 10:01:31 PM
*/
public class Client {
private static Context ctx;
private static Expression exp;
public static void main(String[] args) {
ctx=new Context();
Variable x=new Variable("x");
Variable y=new Variable("y");
Constant c=new Constant(true);
ctx.assign(x, false);
ctx.assign(y, true);
exp=new Or(new And(c,x),new And(y,new Not(x)));
System.out.println(exp.interpret(ctx));
}
}
/**
--false
*/
分享到:
相关推荐
下面是一个简单的Java解释器模式实现的例子: ```java // 抽象解释器接口 public interface Interpreter { public void interpret(Context context); } // 终结符表达式类 public class TerminalExpression ...
在Java中,解释器模式可以用于创建自定义的解析器,以处理特定的语法或逻辑。 **0. 模式定义** 解释器模式定义了一种文法表示,并提供了一个解释器来解释该文法中的句子。它通常涉及创建一个抽象语法树(AST),...
解释器模式是一种设计模式,它允许我们为特定的语言或表达式定义一个解析规则,并提供一个解释器来执行这些规则。这种模式在处理简单的语言或结构化表达式时特别有用,例如配置文件、简单的数学表达式或者编程语言的...
* 解释器模式(Interpreter) 二、java 的 23 种设计模式 java 中的 23 种设计模式可以分为三大类:创建型模式、结构型模式、行为型模式。每种模式都有其特点和应用场景。 1. 工厂方法模式(Factory Method) ...
23. **解释器模式**(Interpreter) - **描述**:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 - **示例**:SQL查询解析器。 通过学习这些设计模式及其...
- Interpreter(解释器模式) - Iterator(迭代器模式) - Mediator(中介者模式) - Memento(备忘录模式) - Observer(观察者模式) - State(状态模式) - Strategy(策略模式) - Template Method...
#### 1.14 解释器模式(Interpreter) 解释器模式定义了语言的文法规则,并定义一个解释器,该解释器使用所提供的文法分析一个句子。 #### 1.15 迭代器模式(Iterator) 迭代器模式提供一种方法顺序访问一个聚合...
- **解释器模式**(Interpreter):给定一种语言,定义它的文法的一种表示,并定义一个解释器,这个解释器用于给定的文法的一个特定实例解释(即执行)。Java的正则表达式引擎就实现了解释器模式。 - **中介者模式...
- **解释器**(Interpreter):给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 - **迭代器**(Iterator):提供一种方法顺序访问一个聚合对象中各个元素,而又...
- 解释器模式(Interpreter):给定一种语言,定义它的文法表示,并提供一个解释器。 - 迭代器模式(Iterator):提供一种方法顺序访问聚合对象的元素,而又不暴露其底层表示。 - 中介者模式(Mediator):定义一...
- 解释器模式(Interpreter Pattern) - 迭代器模式(Iterator Pattern) - 中介者模式(Mediator Pattern) - 备忘录模式(Memento Pattern) - 观察者模式(Observer Pattern) - 状态模式(State Pattern)...
19. **解释器模式(Interpreter)**:给定一种语言,定义它的文法表示,并提供一个解释器,用于解释该语言中的句子。 20. **迭代器模式(Iterator)**:提供一种方法顺序访问聚合对象的元素,而又不暴露其底层表示...
- **解释器模式**(Interpreter):给定一种语言,定义其文法的一种表示,并定义一个解释器,这个解释器用来根据给定的文法解析输入。 在"dp"这个目录下,很可能包含了这23种设计模式的Java实现代码,每种模式都有...
包括策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、命令模式(Command)、迭代器模式(Iterator)、访问者...职责链模式(Chain of Responsibility)和解释器模式(Interpreter)...
22. **解释器模式 (Interpreter Pattern)** - **定义**:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 23. **享元模式 (Flyweight Pattern)** - **定义**...
3. **行为型模式**:这一类模式主要关注对象间的行为和责任分配,如命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者模式(Mediator)、备忘录模式(Memento)、观察者模式...
15. **解释器模式(Interpreter)**:给定一个语言,定义它的文法表示,并提供一个解释器。在Java中,可以实现词法分析和语法分析,构建解析树进行解释执行。 16. **迭代器模式(Iterator)**:提供一种方法顺序...
- 解释器模式(Interpreter):给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 - 迭代器模式(Iterator):提供一种方法顺序访问一个聚合对象中的各个元素,...
C2j编译器 将C语言转换为Java字节码...启动模式,默认为解释器 -d 真的 错误的 是否打开调试信息,默认为false(建议不开启) -F 指定运行文件的路径 一个例子 源文件 void swap ( int arr[ 10 ], int i, int j) {
- 解释器模式(Interpreter):给定一个语言,定义它的文法表示,并提供一个解释器。 - 迭代器模式(Iterator):提供一种方法顺序访问聚合对象的元素,而又不暴露其底层表示。 - 中介者模式(Mediator):用一个...