web解释器模式的参与者有哪些
本文小编为大家详细介绍"web解释器模式的参与者有哪些",内容详细,步骤清晰,细节处理妥当,希望这篇"web解释器模式的参与者有哪些"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
适用性
如果某种语言可以表示为足够简单的抽象语法树,而且效率不是最重要因素,就可以使用解释器模式。
结构
参与者
• Abstract_Expression (抽象表达式,如Expr)
-声明抽象的解释操作,这个操作被所有的子类共享。
•Nonterminal_Expression (非终结符表达式,如AdditiveExpr、MultiplicativeExpr等)
- 文法中所有可以分解为下级语法节点组合的语法节点都需要一个NonterminalExpression类来实现其功能。
-NonterminalExpression为下级语法节点维护一个AbstractExpression类型的列表。
- 实现解释 (Interpret) 操作。解释 (Interpret) 除了要递归调用表示下级语法节点的解释操作之外,也可以对各个节点的解释结果进行进一步计算。例如AdditiveExpr需要对每个MultiplicativeExpr的解释结果进行广义(加或减)的加法计算。
• Terminal_Expression (终结符表达式,如IntegerLiteral等)
- 直接实现文法中的简单操作或计算。
• Context(上下文)
- 包含解释器之外的一些全局信息。
• Client(客户)
- 构建语法树。
- 调用解释操作。
协作
• Client构建一个抽象语法树. 然后初始化上下文并调用解释操作。构建语法树也可以作为语法节点类的功能来实现。毕竟最熟悉语法节点的就是语法节点类自己。
• 每一非终结符表达式节点调用相应子表达式的解释操作并合成处理结果。而各终结符表达式负责进行不依赖其他节点的简单处理或计算。
• 每一节点的解释操作可以通过上下文来存储和访问解释器的状态。例如取得或储存的计算结果、取得事先定义的常量、调用预先登录的函数等都需要通过上下文来实现。
读到这里,这篇"web解释器模式的参与者有哪些"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。