大学 英文网站建设萝岗营销型网站建设
web/
2025/9/25 21:40:03/
文章来源:
大学 英文网站建设,萝岗营销型网站建设,wordpress get terms,展厅设计图片目录
一. 前言
二. 实现
三. 优缺点 一. 前言 解释器模式#xff08;Interpreter Pattern#xff09;指给定一门语言#xff0c;定义它的文法的一种表示#xff0c;并定义一个解释器#xff0c;该解释器使用该表示来解释语言中的句子#xff0c;属于行为型设计模式。是…目录
一. 前言
二. 实现
三. 优缺点 一. 前言 解释器模式Interpreter Pattern指给定一门语言定义它的文法的一种表示并定义一个解释器该解释器使用该表示来解释语言中的句子属于行为型设计模式。是一种按照规定的文法语法进行解析的模式。其核心思想就是识别文法构建解释。
二. 实现 TerminalExpression: 终结符表达式每个终结符都需要一个 TerminalExpression。 NonterminalExpression非终结符表达式实现文法中与非终结符有关的解释操作。 Context: 上下文包含解释器之外的一些全局信息。
案例以下是一个规则检验器实现具有 and 和 or 规则通过规则可以构建一颗解析树用来检验一个文本是否满足解析树定义的规则。 例如一颗解析树为 D And (A Or (B C))文本 D A 满足该解析树定义的规则。 这里的 Context 指的是 String。
public abstract class Expression {public abstract boolean interpret(String str);
}
public class TerminalExpression extends Expression {private String literal null;public TerminalExpression(String str) {literal str;}public boolean interpret(String str) {StringTokenizer st new StringTokenizer(str);while (st.hasMoreTokens()) {String test st.nextToken();if (test.equals(literal)) {return true;}}return false;}
}
public class AndExpression extends Expression {private Expression expression1 null;private Expression expression2 null;public AndExpression(Expression expression1, Expression expression2) {this.expression1 expression1;this.expression2 expression2;}public boolean interpret(String str) {return expression1.interpret(str) expression2.interpret(str);}
}
public class OrExpression extends Expression {private Expression expression1 null;private Expression expression2 null;public OrExpression(Expression expression1, Expression expression2) {this.expression1 expression1;this.expression2 expression2;}public boolean interpret(String str) {return expression1.interpret(str) || expression2.interpret(str);}
}
public class Client {/*** 构建解析树*/public static Expression buildInterpreterTree() {// LiteralExpression terminal1 new TerminalExpression(A);Expression terminal2 new TerminalExpression(B);Expression terminal3 new TerminalExpression(C);Expression terminal4 new TerminalExpression(D);// B CExpression alternation1 new OrExpression(terminal2, terminal3);// A Or (B C)Expression alternation2 new OrExpression(terminal1, alternation1);// D And (A Or (B C))return new AndExpression(terminal4, alternation2);}public static void main(String[] args) {Expression define buildInterpreterTree();String context1 D A;String context2 A B;System.out.println(define.interpret(context1));System.out.println(define.interpret(context2));}
}
true
false
三. 优缺点
优点 1. 由于语法由很多类表示所以当语法规则或者扩展语法时只需要修改或者扩展表达式即可。 2. 对于简单的文法应当比较简单且易于实现过于复杂的语法并不适合解释器模式。 缺点 1.由于语法由很多类表示过于复杂时会产生大量的解释类引起类臃肿增加系统维护的难度。 2. 解释器模式采用递归调用方法当完整表达式层级较深时解释效率会下降。
JDK中的解释器模式 java.util.Pattern java.text.Normalizer javax.el.ELResolver
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/81836.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!