首页 > 其他分享 >解释器模式

解释器模式

时间:2023-03-02 09:55:39浏览次数:52  
标签:解释器 right 模式 表达式 Expression public interpret left

解释器模式是一种行为型设计模式,它可以用来定义和解释一种语言的文法,并根据文法对句子进行解释。解释器模式通常用于编译器,表达式计算,正则表达式,机器人等领域。

它的基本思想是为每个符号(终结符或非终结符)创建一个类,然后使用这些类来构建抽象语法树。

在Java中,解释器模式的实现可以参考以下步骤:

1. 定义一个抽象表达式接口(AbstractExpression),声明一个抽象的解释方法,参数是一个上下文对象(Context)。
2. 定义一个终结符表达式类(TerminalExpression),实现抽象表达式接口,表示语言中的基本元素。
3. 定义一个非终结符表达式类(NonterminalExpression),实现抽象表达式接口,表示语言中的复合元素。
4. 定义一个上下文类(Context),封装一些全局信息,如变量映射等。
5. 定义一个客户端类(Client),构建一个抽象语法树,调用抽象表达式的解释方法得到结果。

 

下面是一个简单的Java程序,使用解释器模式来实现一个简单的算术表达式求值:

// 定义一个抽象表达式接口
interface Expression {
int interpret();
}

// 定义一个数字类,实现表达式接口
class Number implements Expression {
private int value;

public Number(int value) {
this.value = value;
}

@Override
public int interpret() {
return value;
}
}

// 定义一个加法类,实现表达式接口
class Add implements Expression {
private Expression left;
private Expression right;

public Add(Expression left, Expression right) {
this.left = left;
this.right = right;
}

@Override
public int interpret() {
return left.interpret() + right.interpret();
}
}

// 定义一个减法类,实现表达式接口
class Subtract implements Expression {
private Expression left;
private Expression right;

public Subtract(Expression left, Expression right) {
this.left = left;
this.right = right;
}

@Override
public int interpret() {
return left.interpret() - right.interpret();
}
}

// 定义一个乘法类,实现表达式接口
class Multiply implements Expression {
private Expression left;
private Expression right;

public Multiply(Expression left, Expression right) {
this.left = left;
this.right = right;
}

@Override
public int interpret() {
return left.interpret() * right.interpret();
}
}

// 定义一个除法类,实现表达式接口
class Divide implements Expression {
private Expression left;
private Expression right;

public Divide(Expression left, Expression right) {
this.left = left;
this.right = right;
}

@Override
public int interpret() throws ArithmeticException{
if (right.interpret() ==0){
throw new ArithmeticException("除数不能为零");
}
return left.interpret() /right.interpret();
}
}

// 定义一个测试类,创建并解释一些简单的算术表达式

public class InterpreterTest {

public static void main(String[] args) {

// 创建一些数字对象

Number one = new Number(1);
Number two = new Number(2);
Number three = new Number(3);
Number four = new Number(4);

// 创建一些复合表达式对象

Add add1 = new Add(one,two); // 表示1+2
Subtract sub1= new Subtract(three,four); // 表示3-4
Multiply mul1= new Multiply(add1,sub1); // 表示(1+2)*(3-4)
Divide div1= new Divide(mul1,two); // 表示((1+2)*(3-4))/2

// 调用interpret方法求值

System.out.println(div1.interpret()); // 输出-3

}
}

 

 

标签:解释器,right,模式,表达式,Expression,public,interpret,left
From: https://www.cnblogs.com/LJXXXX/p/17170783.html

相关文章

  • Redis哨兵模式
    含义反客为主的自动版,检测主服务器是否宕机,如果宕机后会立即选择一个主服务器下的从服务器再当选主服务器  操作步骤1. 配置哨兵,填写内容自定义的/myredis目录下......
  • js异步编程的三种模式
    写在前面javascript语言的执行环境是"单线程"(singlethread),就是指一次只能完成一件任务。如果有多个任务,就必须排队,等前面一个任务完成,再执行后面一个任务,以此类推。......
  • 调度器46—tick模式
    一、tick简介tick就是一个周期性的中断,周期通过CONFIG_HZ进行配置,一般常取值为100Hz、250Hz、1000Hz。Tick每秒窃取CPU100到1000次,导致Icache、dcache定期被丢弃......
  • 设计模式-动态代理
      一:jdk动态代理  二:cglib代理2.1:引入cglib依赖<!--https://mvnrepository.com/artifact/cglib/cglib--><dependency><groupId>cglib</groupId>......
  • X86平台:快速入门X86保护模式
        本文于2023/2/26开始写作,在此留念    自学了李忠老师的《X86汇编语言:从实模式到保护模式》这本书,除了了解到X86汇编语法和汇编程序设计思想之外,更重......
  • 设计模式
    设计模式构成设计模式由原则和方法两部分组成,原则代表了基本思路,而方式则是其的具体实现。另外设计模式是一种经验主义,所以重在理解而非模仿,以此思考并因地制宜的做出决......
  • 设计模式 策略模式
    案例背景如果一个项目需求游戏设计一个武士 可以使用的武器有刀枪弓箭并且可以随时切换使用那么我们这个程序要怎么写?我们可以写成这样 这个代码也能实现功能......
  • 模拟SPI 4种模式
    https://blog.csdn.net/u012846795/article/details/1238614131/*CPOL=0,CPHA=0,MSBfirst*/2uint8_tSOFT_SPI_RW_MODE0(uint8_twrite_dat)3{......
  • k8s通过sidecar模式收集pod的容器日志至ELK
    架构:已完成的部署1、ES集群及kibana部署​​https://blog.51cto.com/yht1990/6080981​​2、kafaka+zookeeper集群​​https://blog.51cto.com/yht1990/6081518​​准备side......
  • 23种设计模式一:单例模式
    1、说明1.1定义单例模式(SingletonPattern)是Java中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的......