解释器模式
# 概念
给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。
# 使用场景
- 重复发生的问题可以使用解释器模式。
- 一个简单语法需要解释的场景。
# 结构
*AbstractExpression—— 抽象解释器:* 具体的解释任务由各个实现类完成,具体的解释器分别由 TerminalExpression 和 Non-terminalExpression 完成。
*TerminalExpression—— 终结符表达式:* 实现与文法中的元素相关联的解释操作,通常一个解释器模式中只有一个终结符表达式,但有多个实例,对应不同的终结符。
*NonterminalExpression—— 非终结符表达式:* 文法中的每条规则对应于一个非终结表达式,非终结符表达式根据逻辑的复杂程度而增加,原则上每个文法规则都对应一个非终结符表达式。
*Context—— 环境角色:* 一般是用来存放文法中各个终结符所对应的具体值,这些信息需要存放到环境角色中,很多情况下我们使用 Map 来充当环境角色就足够了。
# 代码示例
/**
* 终结符表达式
*/
public class TerminalExpression extends AbstractExpression {
@Override
public void interpret(Context ctx) {
// 实现与语法规则中的终结符相关联的解释操作
}
}
/**
* 非终结符表达式
*/
public class NonterminalExpression extends AbstractExpression {
@Override
public void interpret(Context ctx) {
// 实现与语法规则中的非终结符相关联的解释操作
}
}
上次更新: 2022/12/31, 03:04:26