一)故事
四则运算你会吗?
二)定义
给定一门语言,定义它的方法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。
三)代码例子(未完成)
四)优点
解释器是一个简单语法分析工具,它最显著的优点就是扩展性,修改语法规则只要修改相应的非终结符表达式就可以了,若扩展语法,则只要增加非终结符类就可以了。
五)缺点(未完成)
1)
2)
3)
六)使用场景
1)重复发生的问题可以使用解释器模式
例如:多个应用服务器,每天产生大量的日志,需要对日志文件进行分析处理,由于各个服务器的日志格式不同,但是数据要素是相同的,按照解释器的说法就是终结符表达式都是相同的,但是非终结符表达式就需要制作了。在这种情况下,可以通过程序来一劳永逸地解决该问题。
2)一个简单语法需要解释的场景
为什么是简单?看看非终结表达式,方法规则越多,复杂度越高,而且类间还要进行递归调用(看看我们例子中的栈)。想想看,多个类之间的调用你需要什么样的耐心和信心去排查问题。因此,解释器模式一般用来解析比较标准的字符集,例子SQL语法分析,不过该部分逐渐补专用工具所取代。
数据分析工具、报表设计工具、科学计算工具、SQL语法分析、日志文件分析。
七)注意事项
尽量不要在重要的模式中使用解释器模式,否则维护会是一个很大的问题,在项目中可以使用shell、JRuby、Groovy等脚本语言来代替解释器模式,弥补Java编译型语言的不足,我们在一个大型的分析型项目中就采用JRuby进行运算处理,避免使用解释器模式和四则运算,效率和性能各方面表现良好。
八)扩展
九)总结
一般采用第三方解释器库,如Expression4J、MESP(Math Expression String Parser)、Jep等开源解析工具包,功能都异常强大,而且非常容易使用,效率也还不错,实现大多数的数学运算完全没有问题,自己没有必要从头开始编写解释器。
四则运算你会吗?
二)定义
给定一门语言,定义它的方法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。
三)代码例子(未完成)
四)优点
解释器是一个简单语法分析工具,它最显著的优点就是扩展性,修改语法规则只要修改相应的非终结符表达式就可以了,若扩展语法,则只要增加非终结符类就可以了。
五)缺点(未完成)
1)
2)
3)
六)使用场景
1)重复发生的问题可以使用解释器模式
例如:多个应用服务器,每天产生大量的日志,需要对日志文件进行分析处理,由于各个服务器的日志格式不同,但是数据要素是相同的,按照解释器的说法就是终结符表达式都是相同的,但是非终结符表达式就需要制作了。在这种情况下,可以通过程序来一劳永逸地解决该问题。
2)一个简单语法需要解释的场景
为什么是简单?看看非终结表达式,方法规则越多,复杂度越高,而且类间还要进行递归调用(看看我们例子中的栈)。想想看,多个类之间的调用你需要什么样的耐心和信心去排查问题。因此,解释器模式一般用来解析比较标准的字符集,例子SQL语法分析,不过该部分逐渐补专用工具所取代。
数据分析工具、报表设计工具、科学计算工具、SQL语法分析、日志文件分析。
七)注意事项
尽量不要在重要的模式中使用解释器模式,否则维护会是一个很大的问题,在项目中可以使用shell、JRuby、Groovy等脚本语言来代替解释器模式,弥补Java编译型语言的不足,我们在一个大型的分析型项目中就采用JRuby进行运算处理,避免使用解释器模式和四则运算,效率和性能各方面表现良好。
八)扩展
九)总结
一般采用第三方解释器库,如Expression4J、MESP(Math Expression String Parser)、Jep等开源解析工具包,功能都异常强大,而且非常容易使用,效率也还不错,实现大多数的数学运算完全没有问题,自己没有必要从头开始编写解释器。