定义
Given a language, define a representation for its grammar along with an
interpreter that uses the representation to interpret sentences in the language.
(给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该
表示来解释语言中的句子。)● AbstractExpression——抽象解释器
具体的解释任务由各个实现类完成,具体的解释器分别由 TerminalExpression 和
Non-terminalExpression 完成。
● TerminalExpression——终结符表达式
实现与文法中的元素相关联的解释操作,通常一个解释器模式中只有一个终结符表
达式,但有多个实例,对应不同的终结符。具体到我们例子就是 VarExpression
类,表达式中的每个终结符都在栈中产生了一个 VarExpression 对象。
● NonterminalExpression——非终结符表达式
文法中的每条规则对应于一个非终结表达式,具体到我们的例子就是加减法规则分
别对应到 AddExpression 和 SubExpression 两个类。非终结符表达式根据逻辑的
复杂程度而增加,原则上每个文法规则都对应一个非终结符表达式。
● Context——环境角色
具体到我们的例子中是采用 HashMap 代替。
使用场景
● 重复发生的问题可以使用解释器模式
● 一个简单语法需要解释的场景
注意:
尽量不要在重要的模块中使用解释器模式,否则维护会是一个很大的问题。在项目
中可以使用 shell、JRuby、Groovy 等脚本语言来代替解释器模式,弥补 Java 编
译型语言的不足。
有用请点赞,养成良好习惯!
疑问、交流、鼓励请留言!



