zoukankan      html  css  js  c++  java
  • 解释器模式

         1. 主要优点

          解释器模式的主要优点如下:

          (1) 易于改变和扩展文法。由于在解释器模式中使用类来表示语言的文法规则,因此可以通过继承等机制来改变或扩展文法。

          (2) 每一条文法规则都可以表示为一个类,因此可以方便地实现一个简单的语言。

          (4) 增加新的解释表达式较为方便。如果用户需要增加新的解释表达式只需要对应增加一个新的终结符表达式或非终结符表达式类,原有表达式类代码无须修改,符合“开闭原则”。

          2. 主要缺点

          解释器模式的主要缺点如下:

          (1) 对于复杂文法难以维护。在解释器模式中,每一条规则至少需要定义一个类,因此如果一个语言包含太多文法规则,类的个数将会急剧增加,导致系统难以管理和维护,此时可以考虑使用语法分析程序等方式来取代解释器模式。

          (2) 执行效率较低。由于在解释器模式中使用了大量的循环和递归调用,因此在解释较为复杂的句子时其速度很慢,而且代码的调试过程也比较麻烦。

          3. 适用场景

          在以下情况下可以考虑使用解释器模式:

          (1) 可以将一个需要解释执行的语言中的句子表示为一个抽象语法树。

          (2) 一些重复出现的问题可以用一种简单的语言来进行表达。

          (3) 一个语言的文法较为简单。

          (4) 执行效率不是关键问题。【注:高效的解释器通常不是通过直接解释抽象语法树来实现的,而是需要将它们转换成其他形式,使用解释器模式的执行效率并不高。】

         ● AbstractExpression(抽象表达式):在抽象表达式中声明了抽象的解释操作,它是所有终结符表达式和非终结符表达式的公共父类。(抽象编程下可以一直递归下去

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

           ● NonterminalExpression(非终结符表达式):非终结符表达式也是抽象表达式的子类,它实现了文法中非终结符的解释操作,由于在非终结符表达式中可以包含终结符表达式,也可以继续包含非终结符表达式,因此其解释操作一般通过递归的方式来完成。(作为一个语法转折点,可以继续递归

           ● Context(环境类):环境类又称为上下文类,它用于存储解释器之外的一些全局信息,通常它临时存储了需要解释的语句。(像翻译句子,前文和后文有关联可以用上下文传递
    ---------------------
    作者:Liuwei-Sunny
    来源:CSDN
    原文:https://blog.csdn.net/lovelion/article/details/7713589
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    [Spring开发]获取上下文对象
    [Dubbo开发]Dubbo日志插件实现(打包)
    [Dubbo开发]Dubbo日志插件实现(未打包)
    [Java开发]打印当前路径到控制台
    [Dubbo开发]Dubbo拦截器(Filter)初探
    [Dubbo开发]配置简单的生产者和消费者
    [Dubbo开发]Zookeeper配置
    [Dubbo开发]Maven安装与配置
    EL表达式的特性
    oracle中rownum的使用
  • 原文地址:https://www.cnblogs.com/vhyc/p/10065283.html
Copyright © 2011-2022 走看看