定义:给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。
应用场景:
1、可以将一个需要解释执行的语言中的句子表示为一个抽象语法树。
2、一些重复出现的问题可以用一种简单的语言来进行表达。
3、一个简单语法需要解释的场景。
优点:
1、可扩展性比较好,修改语法规则只要修改相应的非终结符表达式就可以了,若扩展语法,则只要增加非终结符类就可以了。
2、增加了新的解释表达式的方式。
3、在语法树中的每个表达式节点类都是相似的,所以实现其文法较为容易
缺点:
1、解释器模式会引起类膨胀,每个语法都要产生一个非终结符表达式,语法规则比较复杂时,就可能产生大量的类文件,为维护带来了非常多的麻烦。
2、解释器模式采用递归调用方法,当解析复杂、冗长的语法时,效率会变低。
生活场景中的应用:
编译器、运算表达式计算
源码应用:
1)jdk的Pattern类
2)spring的SpelExpressionParser