解析器模式
1.定义
解释器(Interpreter)模式: 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子.
2.实现
解释器模式
- 抽象表达式(AbstractExpression)角色: 声明一个所有的具体表达式角色都需要实现的抽象接口.这个接口主要是一个interpret()方法,称做解释操作.
- 络结符表达式(Terminal Expression)角色: 这是一个具体角色.实现了抽象表达式角色所要求的接口,主要是一个interpret()方法.文法中的每一个终结符都有一个具体终结表达式与之相对应.
- 非终结符表达式(Nonterminal Expression)角色: 这是一个具体角色.文法中的每一条规则R=R1R2....Rn都需要一个具体的非终结符表达式类.对每一个R=R1R2....Rn中的符号都持有一个静态类型为Expression的实例变量.实现解释操作,即interpret()方法.解释操作以递归方式调用上面所提到的代表R1R2....Rn中的各个符号的实例变量.
- 客户端(Client)角色: 代表模式的客户端它有以下功能.建造一个抽象语法树(AST或者Abstract Syntax Tree)调用解释操作interpret().在一般情况下,模式还需要一个环境角色.
- 环境(Context)角色: 提供解释器这外的一些全局信息,比如变量的真实量值等.

3.其它
优点
- 可扩展性比较好,灵活.
- 增加了新的解释表达式的方式.
- 易于实现文法.
缺点
- 执行效率比较低,可利用场景比较少.
- 对于复杂的文法比较难维护.
适用场景
- 可以将一个需要解释执行的语言中的句子表示为一个抽象语法树.
- 一些重复出现的问题可以用一种简单的语言来进行表达.
- 文法较为简单.