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 论文的 Pytorch 代码复现 包含论文中随机权重平均高斯 (SWAG) 的 PyTorch 实现 SWA-Gaussian (SWAG) 是一种在贝叶斯深度学习中用于不确定性表示...
在深入探讨基于DirectX的C++程序“SimpleSample”之前,我们首先需要理解DirectX本身是什么。DirectX是微软公司推出的一系列应用程序编程接口(APIs)集合,其主要目的是为了简化Windows平台下的多媒体应用开发,...
**jQuery SimpleTree 插件详解** `jQuery SimpleTree` 是一个功能丰富的JavaScript插件,它扩展了jQuery库,为开发者提供了构建交互式树形结构的能力。这个插件特别之处在于它支持JSON数据格式,可以创建带有复选框...
1.代码中包括两种异步树加载,Default.aspx中使用json数据格式返回2.Default3使用兼容性很好的Jquery.simpletree树异步加载树,后台返回<ul><li> html标记.可以拖拽树.且插件包很小,只包括jquery.simple.tree.css,...
《jQuery-simple-tree:构建灵活的树形结构》 在网页开发中,经常需要展示层级关系的数据,例如组织架构、文件目录等,这时树形结构组件就显得尤为重要。jQuery-simple-tree是一款基于jQuery的轻量级插件,专为快速...
"SimpleTree"是一款基于jQuery的树形插件,主要用于在网页中展示层次结构的数据,例如目录结构、组织架构或者导航菜单。它通过简洁的API和丰富的定制选项,为开发者提供了在网页上创建交互式树状视图的功能。下面将...
**jQuery插件:Simple Tree详解** 在Web开发中,数据的层次展示经常是必不可少的,例如目录结构、组织架构或层级菜单。为了实现这样的效果,jQuery插件Simple Tree应运而生。它提供了一个轻量级且易于使用的解决...
SimpleTree1.2是一款在JavaScript领域中广泛应用的框架树组件,尤其在网页界面设计和数据组织展示时,它提供了一种高效且灵活的方式来呈现层级结构数据。这个框架以其易用性和丰富的功能特性,赢得了开发者们的青睐...
总的来说,"json jquery simple tree 源码"提供了一种高效、灵活的方法,使得jQuery Simple Tree能够利用JSON数据进行异步加载,提升了用户体验,简化了前后端的数据交互过程,是Web开发中一个实用的工具。
**jQuery Simple Tree 知识点详解** `jQuery Simple Tree` 是一个基于 jQuery 库开发的交互式树型目录组件,它允许用户通过简单的 HTML 和 JavaScript 代码创建具有拖放功能的树状结构。这个组件在网页应用中尤其...
《SimpleTree1.3.zip——探索树结构的奥秘》 在计算机科学中,数据结构是支撑算法设计的基础,而树结构作为一种非线性数据结构,具有广泛的应用。"SimpleTree1.3.zip" 文件正是关于树结构的一个实现,通过解压我们...
a simple cache for android and java
标题"A-simple-expression-evaluation-class.zip_class A"指向的是一个用于计算简单数学表达式的Java类,我们将其称为"表达式求值类"。这个类能够处理基本的算术运算,包括加法、减法、乘法和除法。在编程领域,这种...
**jQuery.simple.tree插件详解** 在前端开发中,无限树形结构常常被用于展示层级关系的数据,例如组织架构、文件目录等。`jQuery.simple.tree`是一款简洁且兼容性良好的JavaScript插件,它允许开发者轻松地在网页上...
Character Recognition Example (III):Training a Simple NN for classification
A Simple Framework for Contrastive Learning of Visual Representations 作者: Ting Chen, Simon Kornblith, Mohammad Norouzi, Geoffrey Hinton 本文提出一种简洁有效的设计的无监督设计,并且以7%的margin刷新...
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 ...
根据提供的文件信息,本文将详细解释ALV(Application List Viewer)中的一个简单示例——`SIMPLE_TREE`,以及如何在ABAP环境中实现一个基本的树形结构展示。 ### ALV简介 ALV(Application List Viewer)是SAP...
IBM在线教程,教程探讨 Simple API for XML 2.0.x 版(或 SAX 2.0.x)的使用。它针对的是如下开发人员,他们理解 XML,并且希望学习这个用于操作 XML 数据的轻量级的、基于事件的 API。 这里假设读者熟悉诸如格式...
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....