美文网首页
解析器模式

解析器模式

作者: 金煜博 | 来源:发表于2021-05-31 23:52 被阅读0次

什么是解析器模式

给定一种语言,定义它的文法表示,并定义一个解释器,该解释器使用该表示来解释语言中句子(通过解析器解析自定义的表达式返回解析后的信息)

示例图

图片.png

示例场景

使用自定义的表达式进行相加 相减操作。
比如:e1=2 e2=8 e3=6, e1+e2=10, e2-e3=2, e1+e2-e3=4

示例代码

1.创建Expression解析器接口

public interface Expression {
    int interpreter(Context context);
}

2.创建Context上下文类

public class Context {
    private Map<Expression, Integer> map = new HashMap<>();

    //添加解析器对象
    public void add(Expression s, Integer value){
        map.put(s, value);
    }
    //获取解析后的值
    public int getValue(Expression s){
        return map.get(s);
    }
}

3.创建TerminalExpression终结表达式

public class TerminalExpression implements  Expression{
    @Override
    public int interpreter(Context context) {
        return context.getValue(this);
    }
}

4.创建NonTerminalExpression非终结表达式

public abstract class NonTerminalExpression implements Expression{
    Expression e1,e2;
    public NonTerminalExpression(Expression e1, Expression e2){
        this.e1 = e1;
        this.e2 = e2;
    }
}

5.创建非终结表达式实现类PlusOperation相加操作和MinusOperation相减操作

public class PlusOperation extends NonTerminalExpression {
    public PlusOperation(Expression e1, Expression e2) {
        super(e1, e2);
    }

    //将两个表达式相加
    @Override
    public int interpreter(Context context) {
        return this.e1.interpreter(context) + this.e2.interpreter(context);
    }
}
public class MinusOperation  extends NonTerminalExpression {
    public MinusOperation(Expression e1, Expression e2) {
        super(e1, e2);
    }

    //将两个表达式相减
    @Override
    public int interpreter(Context context) {
        return this.e1.interpreter(context) - this.e2.interpreter(context);
    }
}

6.创建Client启动类

public class Client {
    public static void main(String[] args) {
        Context context = new Context();
        TerminalExpression e1 = new TerminalExpression();
        TerminalExpression e2 = new TerminalExpression();
        TerminalExpression e3 = new TerminalExpression();
        context.add(e1, 2);
        context.add(e2, 8);
        context.add(e3, 6);
        System.out.println("------------------------------表达式相减操作");
        MinusOperation minusOperation = new MinusOperation(e1, e2);
        System.out.println(minusOperation.interpreter(context));
        System.out.println("------------------------------表达式相加操作");
        PlusOperation plusOperation = new PlusOperation(e1,e3);
        System.out.println(plusOperation.interpreter(context));
        System.out.println("------------------------------表达式先加再减操作");
        Expression expression = new MinusOperation(new PlusOperation(e1, e2), e3);
        System.out.println(expression.interpreter(context));
    }
}

7.运行结果


图片.png

相关文章

  • 解析器模式 与 免费公交卡

    解析器模式,它能用在什么地方呢? 解析器模式,它是如何解析的? 解析器模式,它有哪些关键要素? 解析器模式(Int...

  • “领域规则”模式

    “领域规则”模式 解析器模式 模式定义 类图 要点总结

  • 解析器模式

    一、模式简介 定义:给分析对象定义一个语言,并定义该语言的文法表示,再设计一个解析器来解释语言中的句子,用编译语言...

  • 解析器模式

    解析器模式-定义? 定义:给定一个语言,定义它的文法的一种表达式,并且定义一个解析器,该解析器使用该表示来解析语言...

  • 解析器模式

    定义 给定一个语言,定义它的语法的一种表达式,并且定义一个解析器,该解析器使用该表达式来解析语言中的句子; 文法 ...

  • 解析器模式

    什么是解析器模式 给定一种语言,定义它的文法表示,并定义一个解释器,该解释器使用该表示来解释语言中句子(通过解析器...

  • Boolan C++设计模式第三周心得笔记

    单件模式 享元模式 状态模式 备忘录 组合模式 迭代器 职责链 命令模式 访问器 解析器 本周作业 本次作业要求针...

  • 设计模式之解析器模式

    解析器模式:给拍一个语言,定义它的文法的一种表示,并定义一个解析器,这个解析器使用该表达来解析语言中的句子。 UM...

  • JAVA解析器模式

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

  • 前端面试题

    标签(空格分隔): 面试题 1.Doctype作用?标准模式和兼容模式的区别? Doctype是告诉浏览器的解析器...

网友评论

      本文标题:解析器模式

      本文链接:https://www.haomeiwen.com/subject/vuvisltx.html