java 开发模式之十九 :解析器模式

来源:互联网 发布:免费qq好友克隆软件 编辑:程序博客网 时间:2024/06/07 05:52

原理或定義

给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。属于行为类模式

结构

AbstractExpression:声明一个抽象的Interpret方法,抽象语法树中所有的节点都必须实现该抽象方法。

TerminalExpression:-实现和语法中末端符号相关的Interpret方法。在每个句子的末端符号中均需要一个TerminalExpression实例。

NonterminalExpression:另外一个实现了AbstractExpression 接口的类,用来处理语法树中非末端节点的语法。它含有下一个AbstractExpression(s)的引用,调用它每个子节点的Interpret方法。

Context:Interpreter方法所需要的信息的容器,该信息对Interpreter而言全局可见。充当几个AbstractExpresssion 实例之间的通讯频道。

類圖

使用場景

1、当有一个语言需要解释执行,并且你可以把该语言中的句子表示为一个抽象的语法树时,可使用解释器模式.而当存在以下情况时,该模式的效果最好:

2、该文法简单,对于复杂的文法,文法的类层次变得庞大而无法管理.此时,语法分析程序生成器这样得工具时更好得选择。它们无需构建抽象语法树即可解释表达式,这样可以节省空间而且还可以节省时间;

3、效率不是一个关键的问题,最高效的解释器通常不是通过直接解释语法分析树实现的,而是首先把他们转换成另外一种形式.例如:正则表达式通常被转换成状态机。

優缺點

主要优点有:

1. 解释器是一个简单的语法分析工具,它最显著的优点就是扩展性,修改语法规则只需要修改相应的非终结符就可以了,若扩展语法,只需要增加非终结符类就可以了

缺点主要有

1.解释器模式会引起类的膨胀:每个语法都需要产生一个非终结符表达式,语法规则比较复杂时,就可能产生大量的类文件,为维护带来非常多的麻烦

2.解释器模式采用递归调用方法:递归都是一个不推荐的方式(只在必要条件下使用),它将导致调试非常复杂。低。

它会引起效率、性能以及维护等问题,一般在大中型的框架型项目中能找到它的身影,如一些数据分析工具、报表设计工具、科学计算工具等,如果你确实遇到一种特定类型的问题发生的频率足够高的情况,准备使用解释器模式时,可以考虑一下Expression4JMESPJep 等开源的解析工具包

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 肱三头肌酸痛怎么办 头部中风怎么办 头一剜一剜的疼怎么办 小孩呕吐腹泻怎么办 没睡好头疼怎么办 感冒后头痛怎么办 失眠心脏难受怎么办 一边头痛怎么办 耳朵肿痛怎么办 患有偏头痛怎么办 风吹偏头痛怎么办 严重偏头痛怎么办 总是偏头疼怎么办 感冒偏头痛鼻塞怎么办 头皮一阵阵刺痛怎么办 头顶头发掉怎么办 肌肤吸收不好怎么办 脸部皮肤缺水怎么办 有人背后说坏话怎么办 同事背后说坏话怎么办 有人骂我怎么办 虎牙磨平了怎么办 格瓦拉订错时间怎么办 格瓦拉点卡过期怎么办 有线电视没频道怎么办 电视打不开怎么办 有线电视打不开怎么办 小米电视打不开怎么办 手机乱扣费怎么办 lol下载慢怎么办 下载网速慢怎么办 耐光色牢度不过怎么办 莫名的心慌怎么办 电动车轮胎漏气怎么办 光盘无法播放怎么办 双眼皮疤痕凹陷怎么办 显示器太刺眼怎么办 显示器刺眼怎么办 破戒了怎么办 不小心破戒怎么办 五戒破戒了怎么办