解释器模式(未完成)

一)故事
四则运算你会吗?

二)定义
给定一门语言,定义它的方法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。

三)代码例子(未完成)

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

五)缺点(未完成)
1)
2)
3)

六)使用场景
1)重复发生的问题可以使用解释器模式
例如:多个应用服务器,每天产生大量的日志,需要对日志文件进行分析处理,由于各个服务器的日志格式不同,但是数据要素是相同的,按照解释器的说法就是终结符表达式都是相同的,但是非终结符表达式就需要制作了。在这种情况下,可以通过程序来一劳永逸地解决该问题。
2)一个简单语法需要解释的场景
为什么是简单?看看非终结表达式,方法规则越多,复杂度越高,而且类间还要进行递归调用(看看我们例子中的栈)。想想看,多个类之间的调用你需要什么样的耐心和信心去排查问题。因此,解释器模式一般用来解析比较标准的字符集,例子SQL语法分析,不过该部分逐渐补专用工具所取代。

数据分析工具、报表设计工具、科学计算工具、SQL语法分析、日志文件分析。

七)注意事项
尽量不要在重要的模式中使用解释器模式,否则维护会是一个很大的问题,在项目中可以使用shell、JRuby、Groovy等脚本语言来代替解释器模式,弥补Java编译型语言的不足,我们在一个大型的分析型项目中就采用JRuby进行运算处理,避免使用解释器模式和四则运算,效率和性能各方面表现良好。

八)扩展

九)总结
一般采用第三方解释器库,如Expression4J、MESP(Math Expression String Parser)、Jep等开源解析工具包,功能都异常强大,而且非常容易使用,效率也还不错,实现大多数的数学运算完全没有问题,自己没有必要从头开始编写解释器。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值