资源简介

此公式解析系统能够计算各种算术运算、逻辑运算和比较运算,可以连接本地函数,支持括号分级,允许逐级设置公式内临时变量,提供了分支运算符,并且支持 Json 数据格式的运算。系统编写中使用了很多设计方法,包括概念抽取、继承、多态、面向接口设计、枚举、递归、工厂等等。数据结构也使用了好用但少见的双端队列。很适合对应情况的实用以及学习 Java 的设计思路、编程方式。本程序由 Shane Loo LI 设计和编写,所有的细节都注重了运行效率,在很多细节上都制作了数倍优于爪哇(Java)系统类库的方法;由于只需要处理公式,所以语法树结构单一,也因此保证了比现有其它注入语言的代码解释器更高的执行速度。 详细使用方法参看: http://blog.csdn.net/shanelooli/article/details/8142726

资源截图

代码片段和文件信息

/**
 * 公式解析系统
 * Dataobject.java independently from 2012-4-8 上午03:11:18
 * ---------- ---------- ---------- ----------
 * Copyright(c) 2012-2022 Spads
 * E-mail: Surmounting@gmail.com
 * ---------- ---------- ---------- ----------
 * 公式解析系统能够计算各种算术运算、逻辑运算和比较运算,可以连接本地函数,支持括号
 * 分级,允许逐级设置公式内临时变量,提供了分支运算符,并且支持 Json 数据格式的运算。
 */
package cn.spads.wogs.data.sys;

import java.util.Map;

import cn.spads.wogs.lang.JsonBuilder;


/**
 * 数据对象接口

 * 本接口用以描述每日限免精选中的数据对象。最终数据将通过 {@link Map}<{@link String}
 * {@link object}> 来表现。在实用过程中,数据对象将用于直接将数据内容通过
 * {@link JsonBuilder} 来生成 Json 字符串。此接口主要用于通过程序逐渐将生成、获取的
 * 数据记录进来;在一般的实现中,此接口规定的方法对数据的取出很难做到好的支持。

 * 一般来说,我们可以按照 Java Bean 的规范制作数据保存对象,比如:

 * 

 * public class Person
 * {
 *  private String name;
 *  public void setName(String name) { this.name = name; }
 *  public String getName() { return this.name; }
 * }
 * 

 * 然后在此基础上实现 Dataobject 接口:

 * 

 * public class Person extends Dataobject
 * {
 *  private String name;
 *  public void setName(String name) { this.name = name; }
 *  public String getName() { return this.name; }
 *  public Mapject> getDataMap()
 *  {
 *  Mapject> data = new java.util.HashMapject>();
 *  data.put(“name“ this.name);
 *  return data;
 *  }
 *  public void setData(String key object value)
 *  {
 *  if (“name“.equals(key)) this.setName(value.toString();
 *  }
 *  public object getData(String key)
 *  {
 *  if (“name“.equals(key)) return this.getName();
 *  return null;
 *  }
 * }
 * 

 * 这样的好处是数据存储对象可以根据实用情况,来决定将耗时过程集中在
 * {@link #getDataMap()} 里,还是通过制作私有 Map 成员变量以分散在
 * 每一次具体数据项的写入中。通过此例我们也可以看出,由于无法根据 key
 * 的内容转变getData(String key) 方法返回值的类型,所以不得不引入
 * 类型强制转换。这将给程序的健壮性造成非常大的隐患。所以郑重推荐程序内部通过传统
 * 的 getter 和 setter 方式记录、获取数据。

 * 
 * @author Shane Loo Li
 * @version 1.1.0 2012-4-8 Sunday
 * @see JsonBuilder#buildJson(object)
 * @since Java 6.0
 */
public interface Dataobject
{
/**
 * 获取数据集映射。本方法不限定返回的数据集映射之来源,但要求通过
 * {@link #setData(String object)} 记录的数据应包含在此映射中。另外对于无
 * 数据项的情况,应返回空的 Map 而不是 null 。
 * @return 数据集映射
 */
abstract public Mapject> getDataMap();

/**
 * 注册数据。对于已存在键的重复写入,应覆盖掉原值。这意味着数据值必须能够接受
 * null 。此方法并不要求一定有意义地实现,可以直接抛出
 * {@link IllegalAccessException} 表明不可执行。
 * @see #getDataMap()
 * @param key 数据对象中各种数据的键,可以理解为唯一标识。
 * @param value 数据值。
 * @exception NullPointerException 如果 key == null 则抛出此异常。
 */
abstract public void setData(String key object value) throws IllegalAccessException;

/**
 * 获取数据。以 {@link object} 方式获取数据。此方法并不要求一定有意义地实现,
 * 可以直接抛出 {@link IllegalAccessException} 表明不可执行。
 * @param key 数据对象中各种数据的键,可以理解为唯一标识。
 * @return 指定键对应的数据
 * @exception NullPointerException 如果 key == null 则抛出此异常。
 */
abstract public object getData(String key) throws IllegalAccessExcept

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2012-11-02 14:03  expressionProject\
     文件         241  2012-10-11 10:11  expressionProject\.classpath
     文件         393  2012-10-11 09:54  expressionProject\.project
     目录           0  2012-11-02 14:03  expressionProject\ant\
     文件          25  2012-05-11 14:57  expressionProject\ant\build-all.bat
     文件        1014  2012-11-02 11:42  expressionProject\ant\build.properties
     文件       27745  2012-11-02 14:02  expressionProject\ant\build.xml
     文件       22419  2012-11-02 12:22  expressionProject\ant\doc.xml
     目录           0  2012-11-02 14:03  expressionProject\ant\log\
     文件         231  2012-04-01 18:22  expressionProject\ant\pause
     目录           0  2012-11-02 14:02  expressionProject\classes\
     目录           0  2012-11-02 14:02  expressionProject\conf\
     目录           0  2012-11-02 14:03  expressionProject\lib\
     目录           0  2012-11-02 14:03  expressionProject\lib\build\
     文件      224277  2006-11-02 11:46  expressionProject\lib\build\ant-contrib-1.0b3.jar
     文件        6654  2012-04-05 10:13  expressionProject\lib\build\YUIAnt-zh_CN.jar
     文件      891148  2011-09-28 16:25  expressionProject\lib\build\yuicompressor-2.4.7.jar
     目录           0  2012-11-02 14:03  expressionProject\src-main\
     目录           0  2012-11-02 14:03  expressionProject\src-main\cn\
     目录           0  2012-11-02 14:03  expressionProject\src-main\cn\spads\
     目录           0  2012-11-02 14:03  expressionProject\src-main\cn\spads\wogs\
     目录           0  2012-11-02 14:03  expressionProject\src-main\cn\spads\wogs\data\
     目录           0  2012-11-02 14:03  expressionProject\src-main\cn\spads\wogs\data\sys\
     文件        4319  2012-11-02 11:47  expressionProject\src-main\cn\spads\wogs\data\sys\Dataobject.java
     文件        1724  2012-11-02 11:47  expressionProject\src-main\cn\spads\wogs\data\sys\SimpleDataobject.java
     目录           0  2012-11-02 14:03  expressionProject\src-main\cn\spads\wogs\exp\
     文件        9878  2012-11-02 11:47  expressionProject\src-main\cn\spads\wogs\exp\Evaluator.java
     文件        3524  2012-11-02 11:47  expressionProject\src-main\cn\spads\wogs\exp\EvaluatorFactory.java
     文件        1242  2012-11-02 11:47  expressionProject\src-main\cn\spads\wogs\exp\ExpException.java
     文件        1636  2012-11-02 11:47  expressionProject\src-main\cn\spads\wogs\exp\expression.java
     文件       16687  2012-11-02 11:47  expressionProject\src-main\cn\spads\wogs\exp\expressionFactory.java
............此处省略85个文件信息

评论

共有 条评论