`
jomper
  • 浏览: 37395 次
  • 性别: Icon_minigender_1
  • 来自: 湖北-武汉
社区版块
存档分类
最新评论

Java版运算表达式解析器

    博客分类:
  • Java
阅读更多
主要功能:
对有括号的四则运算解析并求解.
支持多种表达式类型

思路:
1.把中缀表达式转化成后缀表达式
2.从后缀表达式得到解

注意:
该版本只支持1.6JDK,如果想替换成1.5JDK改替换LinkedList的几个方法就行了.

测试用例:
	//初始化 
	//初始化符号优先级
	priorities = new HashMap<String,Integer>();
	priorities.put("(", 9);
	priorities.put(")", 9);
	priorities.put("/", 8);
	priorities.put("*", 8);
	priorities.put("+", 7);
	priorities.put("-", 7);

	//初始化表达式字典
	dict = new HashMap<String,Double>();
	dict.put("a", 2.0);
	dict.put("b", 1.0);
	dict.put("c", 5.0);
	dict.put("d", 3.0);
	dict.put("e", 1.0);
	dict.put("f", 4.0);
	dict.put("g", 10.0);
	dict.put("h", 5.0);
	dict.put("i", 6.0);

	//初始化特殊表达式字典
	realDict = new HashMap<String,Double>();
	realDict.put("{a}", 1.0);
	realDict.put("{b}", 2.0);
	realDict.put("{c}", 3.0);
	realDict.put("{d}", 4.0);
	realDict.put("{e}", 5.0);
	realDict.put("{f}", 6.0);
	realDict.put("{g}", 7.0);
	realDict.put("{h}", 8.0);
	realDict.put("{i}", 9.0);


	//测试一般表达式
	public void testGetValueByExpression(){
		String expression = "a+b+c+d*(g-f)";// 2+1+5+3*(10-4)
		assertEquals(
			new Double(26.0),
			new ExpressionUtil().getValueByExpression(
				expression,
				dict,
				priorities
			)
		);
	}

	//测试特殊表达式
	public void testGetValueByExpressionX(){
		String expression = "({c}-{a}+{b})*({e}-{d})+{f}-{i}/{c}"; //(3-1+2)*(5-4)+6-9/3 =7
		assertEquals(
			new Double(7.0),
			new ExpressionUtil().getValueByExpression(
				expression,
				realDict,
				priorities,
				new String[]{"{","}"}//如果是[a]或者$a$直接替换就行
			)
		);
	}

  • src.zip (1.8 KB)
  • 下载次数: 175
分享到:
评论
1 楼 banxi1988 2011-09-09  
嗯,不错,我学习了!

相关推荐

    四则运算表达式解析器源码(C#)

    实现+、-、*、/、%、&lt;、&gt;、=、、、&gt;= 详细信息查看如下地址: http://blog.csdn.net/welliu/archive/2011/04/13/6320562.aspx

    C#数学运算表达式解释器源码

    C#数学运算表达式解释器,参考:http://blog.csdn.net/testcs_dn/article/details/37776937

    Applet表达式解析器.rar_表达式解析

    java的Applet 表达式解析器. 采用递归下隆解析法.可以进行四刚运算. 乘方,括号等正刚运算

    Java编程艺术-表达式解析器.rar

    数值表达式,可执行算术运算公式。 例如:(100 – 5) * 14/6 &lt;br/&gt;

    C# 逻辑表达式解析器源码

    对四则混合运算做了些扩展,增加了关键字,表达式最终还是返回一个运算值。 支持操作数:int、double、bool、datetime、string 支持关键字:IF、AND、OR、NOT、TRUE、FALSE、ToString、ToDateTime、ToInt、ToDouble...

    表达式解析器类库(附使用例题)

    表达式解析器类库 支持的数学运算: +,-,*,/,^,div,mod,() 支持的逻辑运算: not,and,or,xor,shl,shr 支持的数学函数(请参照Delphi中参数定义): abs,acos,asin,atan,ceil,cos,cosh,avg, cotan,floor,frac,max,min,...

    表达式解析器 IKExpression

    IK Expression是一个开源的(OpenSource),可扩展的(Extensible),基于java语言开发的一个超轻量级(Super lightweight)的公式化语言解析执行工具包。 IK ExpressionV2.X.X不依赖于任何第三方的java库。它做为一...

    IKExpression表达式解析器

    IK Expression是一个开源的(OpenSource),可扩展的(Extensible),基于java语言开发的一个超轻量级(Super lightweight)的公式化语言解析执行工具包。 IK ExpressionV2.0.5不依赖于任何第三方的java库。它做为一...

    jsep:JavaScript表达式解析器

    jsep:微小JavaScript表达式解析器是一个用JavaScript编写的简单表达式解析器。 它可以解析JavaScript表达式,但不能解析操作。 表达式和运算之间的差异类似于Excel电子表格中的单元格与适当JavaScript程序之间的...

    数学表达式解析器 控件和Demo

    ','COS','DEG','PI','RAD','SIN', 'TAN','AND','FALSE','OR','TRUE','XOR', 'NOT','EXP','E','LN','LOG','SQR', 'SQRT','ABS','FRAC','INT','MAX','MIN', 'SGN','CSC','SEC','COT','SINH', 'COSH','TANH','CSCH','...

    【转】表达式解析器

    输入一个带参数的表达式,运算包括四则运算和c++中常用函数运算,三角函数、开放、幂运算等,输入完成后,再输入参数的值,可以计算出表达式的值

    CalclipseMath:Java数学表达式解析器和脚本解释器-开源

    解析器的标准配置具有多种数学运算,包括基本算术,三角函数,组合函数,线性代数等。 CalM包括一个基于数学解析器的脚本解释器。 CalM脚本语言使您可以定义自己的函数和变量。 这些可以导出并在其他脚本中使用。 ...

    算术表达式解析器

    此算术表达式能够在程序运行时根据输入的变量大小和算术表达式动态解析表达式,得到运算结果。支持多项算术运算符和数学函数如下:: + - * / ^ ( ) mod abs, atan, cos, exp, ln, round, sin, sqrt, sqr, ...

    算术表达式动态解析器

    此算术表达式能够在程序运行时根据输入的变量大小和算术表达式动态解析表达式,得到运算结果。支持多项算术运算符和数学函数如下:: + - * / ^ ( ) mod abs, atan, cos, exp, ln, round, sin, sqrt, sqr, trunc 例如...

    Quartz表达式生成器

    Quartz 的Cron任务调度表达式一般人很难理解,在Googole上查询也没有发现类似的代码,所以开发了一个对Quartz Cron 表达式的可视化双向解析和生成的一个java的GUI程序,供使用Quartz的程序员参考和使用。

    JSONExpr 0.5.10 - Delphi的JSON解析及表达式运算包

    表达式的解析和求值是一个应用面非常广的功能。现有的表达式分析器虽然各具特点,但基本上毫无例外的都使用自己独特的内存结构,不具有通用性。而JSON格式因其简明、易于操作,使用面日渐广泛。在此,我启动了一个...

    ExpressionParser:非常简单的二元运算表达式解析器,具有运算符优先级、一元减号加NOT 和括号

    这是一个非常简单的表达式解析器,用于具有运算符优先级、一元减/加和括号的二元运算。 它使用 Dijkstra 的 Shunting-yard 算法。 示例输入/输出: &gt; 1+1 Result: 2 &gt; 1--1 Result: 2 &gt; 1^3 Result: 2 &gt; ~89 ...

    vc++使用mtparse数学表达式分析器_mtparse数学表达式分析器_

    MTParser优雅简洁,提供LIB、COM组件、源代码三种引入方式,是用典型的C++风格编写的解析器,它引入多种设计模式,使用C++类接口继承的方式供扩展表达式句法操作符及函数,因而可扩展性和可维护性都很强,而且它的...

    JSONExpr 0.4.2 - Delphi的JSON解析及表达式运算包

    表达式的解析和求值是一个应用面非常广的功能。现有的表达式分析器虽然各具特点,但基本上毫无例外的都使用自己独特的内存结构,不具有通用性。而JSON格式因其简明、易于操作,使用面日渐广泛。在此,我启动了一个...

    yaep:另一个表达式解析器

    另一个表达式解析器 写下你自己的表达,让 yeap 为你解决它们。 实数和整数都可用。 可以识别常见的代数运算,并且可以为类路径中存在的静态 java 函数创建别名。 通过这种方式扩展求解器能力非常简单

Global site tag (gtag.js) - Google Analytics