提供了评估语言的语法或表达式的方式,它属于行为模式。这种模式实现了一个表达式接口,该接口解析一个特定的上下文。这种模式被用在SQL解析、符号处理引擎等。
¶核心思想
- 将语言中的每个语法规则映射为一个类。
- 构建抽象语法树(AST),由这些类的实例组成。
- 使用递归调用解释整个表达式。
¶角色组成
角色 | 说明 |
---|---|
AbstractExpression |
定义解释操作的公共接口 |
TerminalExpression |
实现文法中与终结符相关的解释操作 |
NonterminalExpression |
实现文法中与非终结符相关的解释操作 |
Context |
包含解释器所需的全局信息 |
Client |
构建表示某一句子的抽象语法树并调用解释方法 |
¶适用场景
- 需要解释执行某种小型语言或表达式(如数学表达式、规则引擎中的条件判断)。
- 文法规则相对稳定且不复杂。
- 开发脚本引擎、DSL解析器、配置规则解释器等。
¶代码示例:布尔表达式解释器
抽象表达式Expression
1 | public interface Expression { |
终结符表达式TerminalExpression
1 | public class TerminalExpression implements Expression { |
非终结符表达式AndExpression
1 | public class AndExpression implements Expression { |
客户端使用
1 | val context = "John is happy today." |