`
Flyingh
  • 浏览: 18295 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Interpreter

 
阅读更多

Interpreter Pattern:其意图是给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子.

Expression.java

 

package com.flyingh.dp.interpreter;

public abstract class Expression {
	public abstract int interpret(Context ctx);
}

 Constant.java

 

package com.flyingh.dp.interpreter;

public class Constant extends Expression {
	private int value;

	public Constant(int value) {
		super();
		this.value = value;
	}

	@Override
	public int interpret(Context ctx) {
		// TODO Auto-generated method stub
		return value;
	}

}

 Variable.java

 

package com.flyingh.dp.interpreter;

public class Variable extends Expression {

	@Override
	public int interpret(Context ctx) {
		// TODO Auto-generated method stub
		return ctx.lookup(this);
	}

}

 Add.java

 

package com.flyingh.dp.interpreter;

public class Add extends Expression {
	private Expression left;
	private Expression right;

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

	@Override
	public int interpret(Context ctx) {
		// TODO Auto-generated method stub
		return left.interpret(ctx) + right.interpret(ctx);
	}

}

 Minus.java

 

package com.flyingh.dp.interpreter;

public class Minus extends Expression {
	private Expression left;
	private Expression right;

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

	@Override
	public int interpret(Context ctx) {
		// TODO Auto-generated method stub
		return left.interpret(ctx) - right.interpret(ctx);
	}

}

 Context.java

 

package com.flyingh.dp.interpreter;

import java.util.HashMap;
import java.util.Map;

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

	public int lookup(Variable var) {
		// TODO Auto-generated method stub
		int value = 0;
		try {
			value = map.get(var);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			System.out.println(var + "还没有赋值!");
		}
		return value;
	}

	public void assign(Variable var, int value) {
		map.put(var, value);
	}

}

 Client.java

 

package com.flyingh.dp.interpreter;

public class Client {
	public static void main(String[] args) {
		Variable var1 = new Variable();
		Variable var2 = new Variable();
		Expression con = new Constant(1);
		Context ctx = new Context();
		ctx.assign(var1, 5);
		ctx.assign(var2, 8);
		Expression add = new Add(new Constant(3), var1);
		System.out.println(add.interpret(ctx));
		Expression add2 = new Add(con, var1);
		System.out.println(add2.interpret(ctx));
		System.out.println("*************");
		ctx.assign(var1, 10);
		ctx.assign(var2, 5);
		Expression minus = new Minus(var1, var2);
		System.out.println(minus.interpret(ctx));
		System.out.println(new Minus(var2, new Constant(4)).interpret(ctx));
	}
}

 程序运行结果如下:

 

8
6
*************
5
1
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    GCode_Interpreter_Gcode_Gcode_interpreter_gcodeinterpreter_

    GCode Interpreter是用于解析和执行G代码指令的软件组件,它将这些指令转化为机器可以理解的信号,进而驱动设备进行工作。 在Arduino环境下,GCode Interpreter通常被用于构建简易的CNC控制器或者3D打印控制器。...

    CentOS 安装软件出现错误:/lib/ld-linux.so.2: bad ELF interpreter 解决

    ### CentOS安装软件时遇到“/lib/ld-linux.so.2: bad ELF interpreter”错误的解决方案 在使用CentOS操作系统的过程中,我们可能会遇到这样的问题:在安装某些软件时,系统会报错“/lib/ld-linux.so.2: bad ELF ...

    Interpreter模式实现简单计算器

    Interpreter模式是一种行为设计模式,它允许我们定义一个语言的文法,并提供一个解释器来处理该语言中的句子。在这个场景中,我们将运用Interpreter模式来实现一个简单的计算器,它能够执行基本的算术运算,如加法、...

    Writing.An.Interpreter.In.Go.epub

    We'll start with 0 lines of code and end up with a fully working interpreter for the Monkey* programming language. Step by step. From tokens to output. All code shown and included. Fully tested. ...

    Python库 | robotframework-interpreter-0.6.4.tar.gz

    本资源"robotframework-interpreter-0.6.4.tar.gz"就是一个这样的库,专注于Robot Framework的解释器功能。 Robot Framework是一个开源自动化测试框架,它支持创建可读性高的测试用例,广泛应用于软件测试、配置...

    使用C#去开发MCU单片机。 支持STM32.snikeguo-nf-interpreter-master.zip

    标题提到的"snikeguo-nf-interpreter-master.zip"是一个可能包含相关源代码和工具的压缩包,而"开发平台.zip"可能提供了用于视频采集和通信的开发环境。我们将围绕这些关键点,讲解C#在嵌入式系统中的应用,TCP协议...

    Python库 | django-python-interpreter-0.0.1.tar.gz

    **Python库 Django-Python-Interpreter 0.0.1** `django-python-interpreter-0.0.1.tar.gz` 是一个包含Python库的压缩包,主要用于在Django框架内运行Python代码。Django是一个用Python编写的开源Web框架,它遵循...

    How to build a monadic interpreter in one day

    标题《How to build a monadic interpreter in one day》和描述中提到的“使用Haskell和Monad技术实现一个解释器。又学Monad也学解释器。”,已经明确指出了本文的核心内容。该内容将介绍如何通过Haskell98标准来...

    (How to Write a (Lisp) Interpreter (in Python))中文版(包括上下篇)

    (How to Write a (Lisp) Interpreter (in Python))和(An ((Even Better) Lisp) Interpreter (in Python))的翻译,对解释器实现原理和函数式编程敢兴趣的可以下载看看!

    writing an interpreter in go

    1. Go语言编程:文档标题提到了“writing an interpreter in go”,这表明本书是关于使用Go语言来编写解释器的教程。Go语言以其简洁、高效和并发处理能力强而著称,它允许开发者快速构建出性能优越的应用程序。解释...

    Ball - Writing An Interpreter In Go.pdf

    " Ball - Writing An Interpreter In Go" 本资源主要讲述如何使用 Go 语言编写一个解释器,作者 Thorsten Ball 通过一步步的指导 Teaching 读者如何从头开始创建一个 Monkey 编程语言的解释器。 在本书中,作者...

    Interpreter模式

    “Interpreter模式”是设计模式中的一种,主要应用于解决表达式问题,它为特定语言提供了表达式接口,使得程序可以理解和执行这些表达式。在Java中实现Interpreter模式,可以创建一个灵活的、可扩展的解析系统,允许...

    Interpreter(解释器)模式.doc

    Interpreter(解释器)模式是一种行为设计模式,它提供了一种方式来表示一种语言的文法,并创建一个解释器来解释语言中的句子。这种模式主要用于解析简单的语言或表达式,例如计算表达式、配置文件等。在计算机科学...

    C++设计模式课件25_Interpreter.pdf

    从提供的文件信息中,我们可以推断该课件《C++设计模式课件25_Interpreter.pdf》是关于C++语言实现设计模式中的解释器模式(Interpreter Pattern)的一部分教学资料。文件中出现的网站***和网易云课堂是指两个在线...

    Writing An Interpreter In Go图书,代码(mobi,pdf,epub)

    《Writing An Interpreter In Go》是一本深入探讨如何使用Go语言编写解释器的书籍。作者通过清晰易懂的方式,引领读者逐步构建一个完整的编程语言解释器。这本书覆盖了编译器构造的基础知识,对于想要理解编程语言...

    Writing An Interpreter In Go mobi

    Writing An Interpreter In Go 英文mobi 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    (行为型模式) Interpreter 解释器模式

    C#面向对象设计模式 (行为型模式) Interpreter 解释器模式 视频讲座下载

    解释器(Interpreter),自定义语法(类C)

    给一个自定义语法的语言写一个解释器(Interpreter),首先写了Parser,然后存入剖析树(Parse Tree)对象中,最后根据Parse Tree的结构执行程序,计算出结果。 语法如下: &lt;prog&gt; ::= program &lt;decl seq&gt; ...

    Writing.An.Interpreter.In.Go.B01N2T1VD2.pdf

    在《Writing An Interpreter In Go》这本书中,作者Thorsten Ball引领读者一起构建一个名为Monkey的编程语言的解释器。本书采用逐步的方式,从零代码开始,直到构建出一个完全功能的Monkey编程语言解释器。书中的...

Global site tag (gtag.js) - Google Analytics