定义语言的文法,并且建立一个解释器来解释该语言中的句子。

 

为某种语言定义一个文法,并用该文法解释语言中的语句,当一个程序要处理许多不同,但又有些类似的问题时,用一种简单的语言描述这些问题,然后让程序解释该语言。

 

在软件构建过程中,如果某一特定领域的问题比较复杂,类似的模式不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变化。将特定领域的问题表达为某种语法规则下的句子,然后构建一个解释器来解释这样的句子,从而达到解决问题的目的。

 

Interpreter模式比较适合简单的文法表示,对于复杂的文法表示,Interpreter模式会产生比较大的类层次结构,需要求助于语法分析生成器这样的标准工具。

 


解析器模式(Interpreter Pattern)

抽象表达式类:

public abstract class AbstractExpression {
	public abstract void interpret(Context ctx);
}

 

终结符表达式类:

public class TerminalExpression extends AbstractExpression{
	public void interpret(Context ctx) {
		System.out.println("TerminalExpression interpret");
	}
}

 

非终结符表达式类:

public class NonterminalExpression extends AbstractExpression {
	private AbstractExpression successor;
	
	public AbstractExpression getSuccessor() {
		return successor;
	}

	public void setSuccessor(AbstractExpression successor) {
		this.successor = successor;
	}

	public void interpret(Context ctx) {
		System.out.println("NonterminalExpression interpret start");
		if(successor!=null){
			successor.interpret(ctx);
		}
		System.out.println("NonterminalExpression interpret end");
	}
}

 

测试类:

public class Client {
	public static void main(String[] args) {
		Context ctx = new Context();
		NonterminalExpression e1 = new NonterminalExpression();
		AbstractExpression e2 = new TerminalExpression();
		e1.setSuccessor(e2);
		e1.interpret(ctx);
	}
}

 

相关文章:

  • 2021-10-17
  • 2021-10-16
  • 2021-08-30
  • 2021-10-13
  • 2021-05-27
  • 2022-12-23
猜你喜欢
  • 2021-12-14
  • 2021-10-05
  • 2021-11-13
  • 2021-12-05
  • 2022-12-23
相关资源
相似解决方案