概念
Interpreter Pattern:定义一个语言(使用规定格式和语法的代码)的文法,并且建立一个解释器来解释该语言钟的句子。
使用
我们的编译器,在对代码进行编译的时候也用到了该模式
下面做一个简单的解释器,一个给机器人下发指令的解释器
命令 | 参数 |
---|---|
direction 移动方向 | ‘up’ ‘down’ ‘left’ ‘right’ |
action 移动方式 | ‘move’ ‘run’ |
distance 移动距离 | an integer |
表达式终结符号 | ‘;’ |
我们在代码中,写上以上命令的具体实现,通过建立一个映射关系,比如传入 up run 5;
可以很快将指令转换成行为,表示向上跑5米
优点
- 易于改变和扩展文法
- 每一条文法规则都可以表示为一个类,所以可以很方便地实现一个简单的语言
- 增加新的解释表达式较为方便,符合开闭原则
- 实现文法较为容易:在抽象语法树中每一个表达式节点类的实现方式都是相似的,这些类的代码编写都不会特别复杂,还可以通过一些工具自动生成节点类代码
缺点
- 对于复杂文法难以维护:每一个规则至少需要定义一个类,所以如果一个语言包含太多文法规则,类的个数会急剧增加,导致系统难以管理和维护,此时可以考虑使用语法分析程序等方式来取代解释器模式
- 执行效率较低:因为解释器模式中使用了大量的循环和递归调用,因此在解释较为复杂的句子时其速度很慢,而且代码的调试过程也比较麻烦