# Why
解释器模式描述了如何为简单的语言定义一个文法,如何在该语言中表示一个句子,以及如何解释这个句子。每个文法规则的语言实例都可以表示为一个抽象语法树。
# What
# UML
# 角色说明
AbstractExpression(抽象表达式):在表达式中声明了抽象的解释操作,是所有终结符表达式和非终结符表达式的公共父类。
TerminalExpression(终结符表达式):实现了与文法中的终结符相关联的解释操作,在句子中的每一个终结符都是该类的一个实例。通常一个解释器模式中只有少数几个终结符表达式类,它们的实例可以通过非终结符表达式组成较为复杂的句子。
NonterminalExpression(非终结符表达式):实现了文法中非终结符的解释操作,由于在非终结符表达式中可以包含终结符表达式,也可以继续包含非终结符表达式,因此其解释操作一般通过递归完成。
Context(环境类):又称上下文类,用于存储解释器之外的一些全局信息,通常临时存储了需要解释的语句。
# 示例
Sunny软件公司欲为某玩具公司开发一套机器人控制程序,在该机器人控制程序中包含一些简单的英文控制指令,每一个指令对应一个表达式(expression),该表达式可以是简单表达式也可以是复合表达式,每一个简单表达式由移动方向(direction),移动方式(action)和移动距离(distance)三部分组成,其中移动方向包括上(up)、下(down)、左(left)、右(right);移动方式包括移动(move)和快速移动(run);移动距离为一个正整数。两个表达式之间可以通过与(and)连接,形成复合(composite)表达式。
# Context
用于存储解释器之外的一些全局信息,通常作为参数传递给所有表达式的Interpret方法,可以在Context对象中存储和访问表达式解释器的状态,向解释器提供一些全局、公共的数据,还可以增加一些所有解释器都共有的功能,减轻解释器的职责。