1.讲解解释器模式
1.1解释器模式定义
给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
1.2解释器模式要点
解析器:把描述客户端调用要求的表达式,经过解析,形成一个抽象语法树的程序。
解释器:解释语法抽象树 一般一个解释器处理一个语法规则1.3解释器模式的结构图以及说明
1.4解释器模式的示例代码
package demo20.interpreter.example2;/** * 抽象表达式 */public abstract class AbstractExpression { /** * 解释的操作 * @param ctx 上下文对象 */ public abstract void interpret(Context ctx);}***************************************************************************************************package demo20.interpreter.example2;/** * 终结符表达式 */public class TerminalExpression extends AbstractExpression{ public void interpret(Context ctx) { //实现与语法规则中的终结符相关联的解释操作 }}*************************************************************************************************package demo20.interpreter.example2;/** * 非终结符表达式 */public class NonterminalExpression extends AbstractExpression { public void interpret(Context ctx) { // 实现与语法规则中的非终结符相关联的解释操作 }}*************************************************************************************************package demo20.interpreter.example2;/** * 上下文,包换解释器之外的一些全局信息 */public class Context {}*************************************************************************************************package demo20.interpreter.example2;/** * 使用解释器的客户 */public class Client { //主要按照语法规则对特定的句子构建抽象语法树 //然后调用解释操作}
1.5解释器模式的本质
分离实现,解释执行
1.6解释器模式的优缺点
优点:易于实现算法,易于扩展新的语法
缺点:不适合复杂的语法,解释器模式会引起类的膨胀,每个语法都需要产生一个非终结符表达式,语法规则比较复杂时,就可能产生大量的类文件,为维护带来非常多的麻烦1.7何时选用
当有一个语言需要解释执行,并且可以将该语言中的句子表示为一个抽象的语法树的时候
语法相对比较简单 效率要求不高1.8附注
由于解释器应用的情况比较少,所以这里就不举例子了。