Add to favourites
News Local and Global in your language
17th of January 2018

因特网



Java设计模式之解释器模式 - EnjoyCodeの博客 - CSDN博客

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

正则表达式,浏览器都是解释器模式的应用。

包含解释器之外的一些全局信息:

//包含解释器之外的一些全局信息 public class Context { private String input; private String output; public String getInput() { return input; } public void setInput(String input) { this.input = input; } public String getOutput() { return output; } public void setOutput(String output) { this.output = output; } }声明一个抽象的解释操作,这个接口为抽象语法树中所有的节点所共享: //声明一个抽象的解释操作,这个接口为抽象语法树中所有的节点所共享 public abstract class AbstractExpression { public abstract void interpret(Context context); }非终结符表达式,为文法中的非终结符实现解释操作: /** * 非终结符表达式,为文法中的非终结符实现解释操作。 * 对文法中每一条规则R1、R2 ... ... Rn都需要一个具体的非终结符表达式类。 * */ public class NonTerminalExpression extends AbstractExpression { @Override public void interpret(Context context) { System.out.println("非终端解释器"); } }实现与文法中的终结符相关联的解释操作: //实现与文法中的终结符相关联的解释操作,文法中每一个终结符都有一个具体终结表达式与之相对应 public class TerminalExpression extends AbstractExpression { @Override public void interpret(Context context) { System.out.println("终端解释器"); } }构建表示该文法定义的语言中一个特定的句子的抽象语法树,调用解释操作: //构建表示该文法定义的语言中一个特定的句子的抽象语法树,调用解释操作 public class InterpreterClient { 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 expression : list) { expression.interpret(context); } } }

运行结果:

终端解释器 非终端解释器 终端解释器 终端解释器Read More




Leave A Comment

More News

互联网

中新网IT新闻

CSDN博客推荐文章

Disclaimer and Notice:WorldProNews.com is not the owner of these news or any information published on this site.