打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
解释器模式第三篇 结构和协作

适用性

如果某种语言可以表示为足够简单的抽象语法树,而且效率不是最重要因素,就可以使用解释器模式。

结构

参与者

· AbstractExpression (抽象表达式,如Expr)

—声明抽象的解释操作,这个操作被所有的子类共享。

·NonterminalExpression (非终结符表达式,如AdditiveExpr、MultiplicativeExpr等)

— 文法中所有可以分解为下级语法节点组合的语法节点都需要一个NonterminalExpression类来实现其功能。

—NonterminalExpression为下级语法节点维护一个AbstractExpression类型的列表。

— 实现解释 (Interpret) 操作。解释 (Interpret) 除了要递归调用表示下级语法节点的解释操作之外,也可以对各个节点的解释结果进行进一步计算。例如AdditiveExpr需要对每个MultiplicativeExpr的解释结果进行广义(加或减)的加法计算。

· TerminalExpression (终结符表达式,如IntegerLiteral等)

— 直接实现文法中的简单操作或计算。

· Context(上下文)

— 包含解释器之外的一些全局信息。

· Client(客户)

— 构建语法树。

— 调用解释操作。

协作

· Client构建一个抽象语法树. 然后初始化上下文并调用解释操作。构建语法树也可以作为语法节点类的功能来实现。毕竟最熟悉语法节点的就是语法节点类自己。

· 每一非终结符表达式节点调用相应子表达式的解释操作并合成处理结果。而各终结符表达式负责进行不依赖其他节点的简单处理或计算。

· 每一节点的解释操作可以通过上下文来存储和访问解释器的状态。例如取得或储存的计算结果、取得事先定义的常量、调用预先登录的函数等都需要通过上下文来实现。

文中类图来自《设计模式》一书。


觉得本文有帮助?请分享给更多人。

关注【面向对象思考】,轻松学习每一天!

有任何疑问,欢迎留言提问或讨论。

面向对象设计,面向对象编程,面向对象思考!

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
解释器模式(interpreter)解析例子
软件设计模式修炼 -- 解释器模式
第17章 行为型模式
图解Java设计模式之解释器模式
解释器模式 Interpreter 行为型 设计模式(十九)
自己动手开发编译器(六)上下文无关语言和文法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服