博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
解释器模式
阅读量:6235 次
发布时间:2019-06-22

本文共 2047 字,大约阅读时间需要 6 分钟。

解释器模式,简单来讲就是一个简版的编译器,如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。解释器模式能对一些较频率执行的文法转换为一种特定的文法类型,不过解释器模式也有其不足,就是如果文法较为复杂的话,就得需要将每一个文法转换成至少一个类,如果包含许多规则的文法可能难以维护和管理。这个时候就需要其他的技术,就是我们最开始提到的语法分析程序或编译器来处理。

解释器模式的基本类结构图很简单,最基本的实现也很简单。

1 package day_13_interpreter; 2  3 /** 4  * 包含解释器之外的一些全局信息,或者说这就是解释器要解释得文法 5  * @author 余林丰 6  * 7  * 2016年10月13日 8  */ 9 public class Context {10 11 }
1 package day_13_interpreter; 2  3 /** 4  * 解释器接口 5  * @author 余林丰 6  * 7  * 2016年10月13日 8  */ 9 public interface IExpression {10     void interpret(Context context);11 }
1 package day_13_interpreter; 2  3 /** 4  * 非终结符表达式,为文法中的非终结符实现解释操作。对每一条规则都要有一个非终结符表达式。 5  * @author 余林丰 6  * 7  * 2016年10月13日 8  */ 9 public class NonterminalExpression implements IExpression {10 11     /* (non-Javadoc)12      * @see day_13_interpreter.IExpression#interpret(day_13_interpreter.Context)13      */14     @Override15     public void interpret(Context context) {16         System.out.println("非终结符解释器");17     }18 19 }
1 package day_13_interpreter; 2  3 /** 4  * 终结符表达式,实现与文法中的终结符相关联的解释操作 5  * @author 余林丰 6  * 7  * 2016年10月13日 8  */ 9 public class TerminalExpression implements IExpression {10 11     /* (non-Javadoc)12      * @see day_13_interpreter.IExpression#interpret(day_13_interpreter.Context)13      */14     @Override15     public void interpret(Context context) {16         System.out.println("终结符解释器");17     }18 19 }
1 package day_13_interpreter; 2  3 import java.util.ArrayList; 4 import java.util.List; 5  6 /** 7  * @author 余林丰 8  * 9  * 2016年10月13日10  */11 public class Client {12     13     public static void main(String[] args){14         Context context = new Context();15         List
list = new ArrayList
();16 list.add(new TerminalExpression());17 list.add(new NonterminalExpression());18 list.add(new TerminalExpression());19 list.add(new TerminalExpression());20 21 for (IExpression expression : list){22 expression.interpret(context);23 }24 }25 26 }

 

转载地址:http://ruzia.baihongyu.com/

你可能感兴趣的文章
网站长期被挂马 访问者屡遭木马侵害
查看>>
Google推反恶意广告网站 防护恶意软件威胁
查看>>
跟我学AngularJs:AngularJs入门及第一个实例
查看>>
翻译处女作欢迎批评指正-tornado的模板系统文档
查看>>
什么时候该用MVC,什么时候该用Webform?
查看>>
windows下安装和设置Git客户端
查看>>
Shell调试篇
查看>>
Android 如何导入已有的外部数据库
查看>>
webpy猫腻之web.database with SQLite
查看>>
关于用netsh.exe配置系统防火墙
查看>>
基本控件使用-使用列表框控件ListBox
查看>>
linux常用命令大全[转]
查看>>
log parser 微软iis 日志分析
查看>>
剖析OkHttp缓存机制
查看>>
CentOS 7 安装 Oracle 11.2.0.4
查看>>
HTML项目总结
查看>>
iPad和iPhone开发的比较
查看>>
mysql 针对单张表的备份与还原
查看>>
Gerrit使用简介
查看>>
SQL2008报表三种实现Reporting Service2008匿名访问的方法(转)
查看>>