zoukankan      html  css  js  c++  java
  • 设计模式之解释器模式规则你来定(二十五)

    解释器模式(interpreter), 最后一个模式了


    最近比较苦b, 前同事内推某公司直接被拒, 理由学历的问题, 现在立个flag, 1年之后进阿里巴巴, 听说阿里巴巴没有这个要求, 梦想还是要有的, 万一实现了呢


    解释器模式(interpreter)定义

    • 定义: 给定一个语言, 定义它的文法的一种表示, 并定义一个解释器, 这个解释器使用该表示来解释语言中的句子
    • 使用场景: 解释器模式需要解决的是, 如果一种特定类型的问题发生的频率足够高, 那么可能就值得将该问题的各个实例表述为一个简单的语言中的句子. 这样就可以构建一个解释器. 该解释器通过解释这些句子来解决该问题
    文法是啥?
    • 文法也叫做语法, 指的是语言的结构方式. 包括词的构成和变化, 词组和句子的组织.
    • 也可以简单的理解为一个语言的规则
    上下文无关文法的组成
    • 非总结符号集(表达式, 程序语句, 标识符号)
    • 终结符号集(-,+,= 一些逻辑符号常量等)
    • 产生式集合, 也可以称为规则集合( id->a|b|...)
    • 一个起始符号, 这个符号是非终结符号集的一个元素(compilationUnit编译单元作为起始符号)
    • 一个简单的例子
      • a->a+b->a-b->b
      • b->0|1|2...|9
      • 现在我们需要一个3-5+8的减加表达式
      • 推到 a-> a+b-> a-b+b->b-b+b->3-b+b->3-5+b->3-5+8
      • 这个文法的意思大概就是
      • a = a+b ; a = a-b; a=b ; b只能是 1-9的数, 其中的+-作为终结符号, 1|...9作为产生集合, a为起始符号

    uml讲解

    • 类图中有四个角色, 抽象表达式, 终结表达式, 非终结表达式以及上下文

    应用场景

    • 日常工作中使用到解释器的模式很少
    • 正则算一个
    • 敏感词过滤看着也有点像
  • 相关阅读:
    P1579哥德巴赫猜想
    JAVA快速入门方法
    PHP快速入门方法
    Java 8 lambda表达式
    JVM内存配置参数
    Synchronized 关键字
    数据库事务的理解
    hello world 执行原理
    面试知识点总结之JVM调优
    面试知识点总结之RabbitMQ/Kafka使用场景
  • 原文地址:https://www.cnblogs.com/denghailei/p/6898475.html
Copyright © 2011-2022 走看看