C++设计模式之解释器模式

解释器模式

希望通过一些简单的语言实现一些特定的操作,向计算机输入一个句子或文件,他就能够按照预先定义的文法规定对句子或文件进行解释,从而实现相应的功能。
解释器模式描叙了如何为简单语言定义一个文法,如何在该语言中表达一个句子,以及如何去解释这些句子,这就涉及到如何表达一个语言的文法以及如何构造一棵抽象语法树。
以具体下面的表达式为例,1+2+3+4-1,
可以使用如下的文法规则去表达:
expression ::= value | operation
operation ::= expression + expression | expression - expression
value ::= integer
::= 表示定义为,由左右两个语言单位的定义而成,语言单位由终结符(语言组成的元素不能再分解)与非终结符组成。
抽象语法树则通过图形方式来直观表达语言的组成,每一棵抽象语法树对应一个语言实例,
在这里插入图片描述
终结符表达式类的实例表示为叶子结点,而非终结符表达类的实例表示为非叶子结点,可以将终结符表达式类的实例以及包含终结符与非终结符实例的子表达式作为其子节点。
代码可以去我的资源中下载。

解释器模式结构图

在这里插入图片描述
Context: 环境类,主要用于存储解释器之外的一些全局信息,通常临时存储需要解释的句子。
抽象表达式: 抽象表达式中声明了抽象的解释操作,是所有非终结符表达式与终结符表达式的父类。
终结符表达式: 抽象表达式子类,实现了与文法中终结符相关的解释操作,在句子中的每一个终结符都是该类的一个实例。一般解释器模式中只有几个少数的终结符表达式子类,它们的实例可以通过非终结符表达式组成较为复杂的句子。
非终结符表达式: 抽象表达式子类,实现了文法中非终结符的解释操作,由于非终结符表达式中可以包含终结符表达式,也可以继续包含非终极符表达式,因此解释操作一般通过递归方式操作。

优缺点

优点:

  1. 易于扩展与改变文法,实现文法容易。
  2. 每一条文法规则都可以表示为一个类,可以实现简单的语言。

缺点:

  1. 对于复杂的文法难以维护,需要类对象管理偏多,造成系统难以维护与管理。
  2. 执行效率低, 可能会包含有大量的循环与递归调用,因此在解释复杂的句子中速度很慢。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道阻且长,行则降至

无聊,打赏求刺激而已

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值