Aha!设计模式(82)-解释器模式(3)

网友投稿 620 2022-10-12

Aha!设计模式(82)-解释器模式(3)

Aha!设计模式(82)-解释器模式(3)

适用性

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

结构

参与者

•NonterminalExpression (非终结符表达式,如AdditiveExpr、MultiplicativeExpr等) — 文法中所有可以分解为下级语法节点组合的语法节点都需要一个NonterminalExpression类来实现其功能。 —NonterminalExpression为下级语法节点维护一个AbstractExpression类型的列表。 — 实现解释 (Interpret) 操作。解释 (Interpret) 除了要递归调用表示下级语法节点的解释操作之外,也可以对各个节点的解释结果进行进一步计算。例如AdditiveExpr需要对每个MultiplicativeExpr的解释结果进行广义(加或减)的加法计算。

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

— 直接实现文法中的简单操作或计算。 • Context(上下文) — 包含解释器之外的一些全局信息。 • Client(客户)

— 构建语法树。

— 调用解释操作。

协作

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

• 每一非终结符表达式节点调用相应子表达式的解释操作并合成处理结果。而各终结符表达式负责进行不依赖其他节点的简单处理或计算。 • 每一节点的解释操作可以通过上下文来存储和访问解释器的状态。例如取得或储存的计算结果、取得事先定义的常量、调用预先登录的函数等都需要通过上下文来实现。

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

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:C++核心准则​Pro.bounds:边界安全群组
下一篇:小团队管理 是一款开源的微信小程序,主要用于日常的团队管理(小团队管理的7个方法)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~