解释器模式描述了如何构成一个简单的语言解释器,主要应用在使用面向对象语言开发
编译器中;在实际应用中,我们可能很少碰到去构造一个语言的文法的情况。
虽然你几乎用不到这个模式,但是看一看还是能受到一定的启发的。
定义:定义语言的文法,并且建立一个解释器来解释该语言中的句子,它属于类的行为模式。
1.抽象表达式角色:声明一个的解释操作,这个接口为所有具体表达式角色(抽象语法树中的节点)都要实现的。
抽象语法树的每一个节点都
代表一个语句,而在每个节点上都可以执行解释方法。这个解释方法的执行就代表这个
语句被解释。由于每一个语句都代表这个语句被解释。由于每一个语句都代表一个常见
的问题的实例,因此每一个节点上的解释操作都代表对一个问题实例的解答。
2。终结符表达式角色:具体表达式。
a)实现与文法中的终结相关联的解释操作
b)而且句子中的每个终结符需要方尺类的一个实例与之对应
3.非终结符表达式角色:具体表达式。
a) 文法中的每条规则 R::=R1R2…Rn 都需要一个非终结符表带式角色
b) 对于从 R1 到Rn 的每个符号都维护一个抽象表达式角色的实例变量
c) 实现解释操作,解释一般要递归地调用表示从 R1 到Rn 的那些对象的解释操作
4) 上下文(环境)角色:包含解释器之外的一些全局信息。
5) 客户角色:
a) 构建(或者被给定)表示该文法定义的语言中的一个特定的句子的抽象语法树
b) 调用解释操作
例子略/./以后用的上的时候在研究研究
四、优缺点
解释器模式提供了一个简单的方式来执行语法,而且容易修改或者扩展语法。一般系统
中很多类使用相似的语法,可以使用一个解释器来代替为每一个规则实现一个解释器。而且
在解释器中不同的规则是由不同的类来实现的,这样使得添加一个新的语法规则变得简单。
但是解释器模式对于复杂文法难以维护。可以想象一下,每一个规则要对应一个处理类,
而且这些类还要递归调用抽象表达式角色,多如乱麻的类交织在一起是多么恐怖的一件事
啊!
五、总结
这样对解释器模式应该有了些大体的认识了吧,由于这个模式使用的案例匮乏,所以本
文大部分观点直接来自于GOF 的原著。只是实例代码是亲自实现并调试通过的。
posted on 2012-01-04 21:58 柳清风 阅读(177) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


统计