vuePress-theme-reco MS    2019 - 2020

Choose mode

  • dark
  • auto
  • light
主页
分类
  • 程序设计
标签
时间线
关于我
author-avatar

MS

26

文章

3

标签

主页
分类
  • 程序设计
标签
时间线
关于我
  • 解释器模式

    • Why
      • What
        • UML
        • 角色说明
        • 示例
        • Context

    解释器模式

    vuePress-theme-reco MS    2019 - 2020

    解释器模式


    MS 2020-04-15 18:27:36 面向对象 设计模式

    # Why

    解释器模式描述了如何为简单的语言定义一个文法,如何在该语言中表示一个句子,以及如何解释这个句子。每个文法规则的语言实例都可以表示为一个抽象语法树。

    # What

    # UML

    解释器模式

    # 角色说明

    AbstractExpression(抽象表达式):在表达式中声明了抽象的解释操作,是所有终结符表达式和非终结符表达式的公共父类。

    TerminalExpression(终结符表达式):实现了与文法中的终结符相关联的解释操作,在句子中的每一个终结符都是该类的一个实例。通常一个解释器模式中只有少数几个终结符表达式类,它们的实例可以通过非终结符表达式组成较为复杂的句子。

    NonterminalExpression(非终结符表达式):实现了文法中非终结符的解释操作,由于在非终结符表达式中可以包含终结符表达式,也可以继续包含非终结符表达式,因此其解释操作一般通过递归完成。

    Context(环境类):又称上下文类,用于存储解释器之外的一些全局信息,通常临时存储了需要解释的语句。

    # 示例

    Sunny软件公司欲为某玩具公司开发一套机器人控制程序,在该机器人控制程序中包含一些简单的英文控制指令,每一个指令对应一个表达式(expression),该表达式可以是简单表达式也可以是复合表达式,每一个简单表达式由移动方向(direction),移动方式(action)和移动距离(distance)三部分组成,其中移动方向包括上(up)、下(down)、左(left)、右(right);移动方式包括移动(move)和快速移动(run);移动距离为一个正整数。两个表达式之间可以通过与(and)连接,形成复合(composite)表达式。

    代码链接

    # Context

    用于存储解释器之外的一些全局信息,通常作为参数传递给所有表达式的Interpret方法,可以在Context对象中存储和访问表达式解释器的状态,向解释器提供一些全局、公共的数据,还可以增加一些所有解释器都共有的功能,减轻解释器的职责。