Saul's blog Saul's blog
首页
后端
分布式
前端
更多
分类
标签
归档
友情链接
关于
GitHub (opens new window)

Saul.J.Wu

立身之本,不在高低。
首页
后端
分布式
前端
更多
分类
标签
归档
友情链接
关于
GitHub (opens new window)
  • Java入门基础

  • Java核心基础

  • 设计模式

    • 概念
    • 创建型模式

    • 结构型模式

    • 行为型模式

      • 责任链
      • 命令
      • 解释器
        • 迭代器
        • 中介
        • 备忘录
        • 观察者
        • 状态
        • 策略
        • 模板方法
        • 访问者
    • Web开发

    • SpringBoot

    • 微服务

    • Elasticsearch

    • 运维

    • 后端
    • 设计模式
    • 行为型模式
    SaulJWu
    2021-02-10

    解释器

    给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

    解释器模式(Interpreter)是一种针对特定问题设计的一种解决方案。例如,匹配字符串的时候,由于匹配条件非常灵活,使得通过代码来实现非常不灵活。举个例子,针对以下的匹配条件:

    • 以+开头的数字表示的区号和电话号码,如+861012345678;
    • 以英文开头,后接英文和数字,并以.分隔的域名,如www.liaoxuefeng.com;
    • 以/开头的文件路径,如/path/to/file.txt;
    • ...

    因此,需要一种通用的表示方法——正则表达式来进行匹配。正则表达式就是一个字符串,但要把正则表达式解析为语法树,然后再匹配指定的字符串,就需要一个解释器。

    实现一个完整的正则表达式的解释器非常复杂,但是使用解释器模式却很简单:

    String s = "+861012345678";
    System.out.println(s.matches("^\\+\\d+$"));
    
    1
    2

    类似的,当我们使用JDBC时,执行的SQL语句虽然是字符串,但最终需要数据库服务器的SQL解释器来把SQL“翻译”成数据库服务器能执行的代码,这个执行引擎也非常复杂,但对于使用者来说,仅仅需要写出SQL字符串即可。

    # 小结

    解释器模式通过抽象语法树实现对用户输入的解释执行。

    解释器模式的实现通常非常复杂,且一般只能解决一类特定问题。

    帮我改善此页面 (opens new window)
    上次更新: 2021/02/16, 02:24:29
    命令
    迭代器

    ← 命令 迭代器→

    最近更新
    01
    zabbix学习笔记二
    02-28
    02
    zabbix学习笔记一
    02-10
    03
    Linux访问不了github
    12-08
    更多文章>
    Theme by Vdoing | Copyright © 2020-2022 Saul.J.Wu | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式