`
k_lb
  • 浏览: 856195 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论
  • kitleer: 据我所知,国内有款ETL调度监控工具TaskCTL,支持ket ...
    kettle调度

A Simple Sample for Expression Tree

 
阅读更多

A Simple Sample for Expression Tree<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

(wang hailong)

我写过一篇用Visitor Pattern处理表达式树的例子。本文讲解表达式树处理的一般方法,给出一个简单例子的源代码,并给出相关解释。

源代码通过编译,正确运行。java expr.TestMain

首先,我们来看被表达式的类的定义。

Expression.java 表达式类公用接口,所有的表达式类都要实现这个接口

package expr;

public interface Expression {

public int value();

}

ConstantExpression.java 常数表达式

package expr;

public class ConstantExpression implements Expression{

protected int data;

public ConstantExpression(int theData){

data = theData;

}

public int value(){

return data;

}

}

VariableExpression.java 变量表达式

package expr;

import java.util.Map;

public class VariableExpression implements Expression{

protected String myName;

protected Map variableTable;

public VariableExpression(String itsName, Map theVariableTable){

myName = itsName;

variableTable = theVariableTable;

}

// get the variable name

public String name(){

return myName;

}

public int value(){

// search in table

Object valueObj = variableTable.get(myName);

if(valueObj == null){

return 0;

}

int data = ((Integer)valueObj).intValue();

return data;

}

}

AddExpression.java 加法表达式

package expr;

public class AddExpression implements Expression {

protected Expression leftNode;

protected Expression rightNode;

public AddExpression(Expression aLeftNode, Expression aRightNode) {

leftNode = aLeftNode;

rightNode = aRightNode;

}

public int value() {

return leftNode.value() + rightNode.value();

}

}

SubExpression.java 减法表达式

package expr;

public class SubExpression implements Expression {

protected Expression leftNode;

protected Expression rightNode;

public SubExpression(Expression aLeftNode, Expression aRightNode) {

leftNode = aLeftNode;

rightNode = aRightNode;

}

public int value() {

return leftNode.value() - rightNode.value();

}

}

以上就是表达式部分所有的代码了。

下面是测试程序。

TestMain.java 首先,生成一个表达式树,然后获取这个表达式的值

package expr;

import java.util.Map;

import java.util.Hashtable;

public class TestMain{

public static void main(String[] args) {

Map variableTable = new Hashtable();

//生成一个表达式树x - (6 + y)

VariableExpression x = new VariableExpression("x", variableTable);

VariableExpression y = new VariableExpression("y", variableTable);

ConstantExpression six = new ConstantExpression(6);

AddExpression six_add_y = new AddExpression(six, y);

SubExpression x_sub_6_y = new SubExpression(x, six_add_y);

// set value for variables

variableTable.put(x.name(), new Integer(11)); // x = 11

variableTable.put(y.name(), new Integer(3)); // y = 3

// 运算

int result = x_sub_6_y.value();

System.out.println(result);

}

}

输出结果为:

2

以上这个例子很容易扩展,增加乘除运算。

分享到:
评论

相关推荐

    A Simple Baseline for Bayesian Uncertainty in Deep Learning 代码复现

    A Simple Baseline for Bayesian Uncertainty in Deep Learning 论文的 Pytorch 代码复现 包含论文中随机权重平均高斯 (SWAG) 的 PyTorch 实现 SWA-Gaussian (SWAG) 是一种在贝叶斯深度学习中用于不确定性表示...

    SimpleSample.rar

    在深入探讨基于DirectX的C++程序“SimpleSample”之前,我们首先需要理解DirectX本身是什么。DirectX是微软公司推出的一系列应用程序编程接口(APIs)集合,其主要目的是为了简化Windows平台下的多媒体应用开发,...

    扩展了一棵jquery的树插件SimpleTree(jquery.simple.tree.js),支持json数据,checkbox树,以及异步加载,

    **jQuery SimpleTree 插件详解** `jQuery SimpleTree` 是一个功能丰富的JavaScript插件,它扩展了jQuery库,为开发者提供了构建交互式树形结构的能力。这个插件特别之处在于它支持JSON数据格式,可以创建带有复选框...

    simpletree完整示例.

    1.代码中包括两种异步树加载,Default.aspx中使用json数据格式返回2.Default3使用兼容性很好的Jquery.simpletree树异步加载树,后台返回&lt;ul&gt;&lt;li&gt; html标记.可以拖拽树.且插件包很小,只包括jquery.simple.tree.css,...

    jQuery-simple-tree

    《jQuery-simple-tree:构建灵活的树形结构》 在网页开发中,经常需要展示层级关系的数据,例如组织架构、文件目录等,这时树形结构组件就显得尤为重要。jQuery-simple-tree是一款基于jQuery的轻量级插件,专为快速...

    simpletree

    "SimpleTree"是一款基于jQuery的树形插件,主要用于在网页中展示层次结构的数据,例如目录结构、组织架构或者导航菜单。它通过简洁的API和丰富的定制选项,为开发者提供了在网页上创建交互式树状视图的功能。下面将...

    jQuery插件之二:Simple Tree

    **jQuery插件:Simple Tree详解** 在Web开发中,数据的层次展示经常是必不可少的,例如目录结构、组织架构或层级菜单。为了实现这样的效果,jQuery插件Simple Tree应运而生。它提供了一个轻量级且易于使用的解决...

    SimpleTree1.2一个非常好的框架树

    SimpleTree1.2是一款在JavaScript领域中广泛应用的框架树组件,尤其在网页界面设计和数据组织展示时,它提供了一种高效且灵活的方式来呈现层级结构数据。这个框架以其易用性和丰富的功能特性,赢得了开发者们的青睐...

    json jquery simple tree 源码

    总的来说,"json jquery simple tree 源码"提供了一种高效、灵活的方法,使得jQuery Simple Tree能够利用JSON数据进行异步加载,提升了用户体验,简化了前后端的数据交互过程,是Web开发中一个实用的工具。

    jquery simple tree

    **jQuery Simple Tree 知识点详解** `jQuery Simple Tree` 是一个基于 jQuery 库开发的交互式树型目录组件,它允许用户通过简单的 HTML 和 JavaScript 代码创建具有拖放功能的树状结构。这个组件在网页应用中尤其...

    SimpleTree1.3.zip

    《SimpleTree1.3.zip——探索树结构的奥秘》 在计算机科学中,数据结构是支撑算法设计的基础,而树结构作为一种非线性数据结构,具有广泛的应用。"SimpleTree1.3.zip" 文件正是关于树结构的一个实现,通过解压我们...

    a simple cache for android and java.zip

    a simple cache for android and java

    A-simple-expression-evaluation-class.zip_class A

    标题"A-simple-expression-evaluation-class.zip_class A"指向的是一个用于计算简单数学表达式的Java类,我们将其称为"表达式求值类"。这个类能够处理基本的算术运算,包括加法、减法、乘法和除法。在编程领域,这种...

    一款简单兼容性好无限树插件jquery.simple.tree(已修改)

    **jQuery.simple.tree插件详解** 在前端开发中,无限树形结构常常被用于展示层级关系的数据,例如组织架构、文件目录等。`jQuery.simple.tree`是一款简洁且兼容性良好的JavaScript插件,它允许开发者轻松地在网页上...

    Character Recognition Example :Training a Simple NN for classification

    Character Recognition Example (III):Training a Simple NN for classification

    Article Analysis(AA): A Simple Framework for Contrastive Learning of Visual Representations

    A Simple Framework for Contrastive Learning of Visual Representations 作者: Ting Chen, Simon Kornblith, Mohammad Norouzi, Geoffrey Hinton 本文提出一种简洁有效的设计的无监督设计,并且以7%的margin刷新...

    a simple library for matrix computation in c++

    THIS is a SIMPLE library for matrix in c++. It can do QR decomposition and LU AND inversion. HOwever, in my view, newmat10 takes priority when selecting a good matrix library with its simplicity and ...

    sample_tree alv

    根据提供的文件信息,本文将详细解释ALV(Application List Viewer)中的一个简单示例——`SIMPLE_TREE`,以及如何在ABAP环境中实现一个基本的树形结构展示。 ### ALV简介 ALV(Application List Viewer)是SAP...

    Simple API for XML 2.0.x 版的使用

    IBM在线教程,教程探讨 Simple API for XML 2.0.x 版(或 SAX 2.0.x)的使用。它针对的是如下开发人员,他们理解 XML,并且希望学习这个用于操作 XML 数据的轻量级的、基于事件的 API。 这里假设读者熟悉诸如格式...

    QT5.5 Demo - Simple Tree Modek Example

    Qt's model/view architecture provides a standard way for views to manipulate information in a data source, using an abstract model of the data to simplify and standardize the way it is accessed....

Global site tag (gtag.js) - Google Analytics