`
jomper
  • 浏览: 38024 次
  • 性别: 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#)

    标题中的“四则运算表达式解析器源码(C#)”是指一个使用C#编程语言编写的程序,它的主要功能是解析包含加法(+)、减法(-)、乘法(*)、除法(/)、取模(%)以及比较运算符(&lt;、&gt;、=、、、&gt;=)的数学表达式。...

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

    本话题聚焦于Java编程艺术中的一个关键环节——表达式解析器,它允许我们处理和求值数学或逻辑表达式。在给定的“Java编程艺术-表达式解析器.rar”压缩包文件中,我们可以深入学习如何在Java中构建这样一个工具,以...

    C# 表达式解析器源代码(修正)

    在本文中,我们将深入探讨C#中的表达式解析器,特别是在修正了算符优先级错误之后的实现。C#表达式解析器是一个程序,它能够分析输入的字符串表达式,并将其转换为计算机可以理解的形式,以便执行计算或逻辑操作。 ...

    C#表达式解析器-1.0

    《C#表达式解析器-1.0:深入解析与应用》 在编程领域,表达式解析器是一种至关重要的工具,它能够理解并处理由程序员编写的数学或逻辑表达式,将其转化为计算机可执行的形式。C#表达式解析器正是这样一种实现,尤其...

    山寨版的简易表达式解析器

    标题 "山寨版的简易表达式解析器" 暗示我们即将探讨的是一个自定义的、简化版的表达式解析器实现。这类工具通常用于处理数学或逻辑表达式,将字符串形式的表达式转化为可执行的代码。在这个案例中,可能是为了学习...

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

    在编程领域,构建一个数学运算表达式解释器是一项常见的任务,尤其对于动态语言或脚本环境。在这个场景中,我们关注的是一个用C#实现的数学运算表达式解释器。这个解释器允许程序动态地处理数学表达式,而无需预先...

    IK Expression开源表达式解析器 V2.1.2.rar

    IK Expression开源表达式解析器V2.1.2是一款用于处理和解析文本表达式的强大工具,广泛应用于各类软件开发和数据分析场景。它以其高效、灵活和可扩展性著称,为开发者提供了便捷的方式来处理和执行复杂的逻辑表达式...

    开源表达式解析器开源表达式解析器开源表达式解析器

    ### 开源表达式解析器知识点总结 #### 一、IKExpression概述 IKExpression是一个开源的、可扩展的、基于Java语言开发的超轻量级公式化语言解析执行工具包。该工具包完全独立,不依赖任何第三方Java库,能够轻松...

    java表达式解析,附加

    在Java编程语言中,表达式解析是程序设计中的一个关键环节,它涉及到将人类可读的数学或逻辑表达式转化为计算机能理解的形式。这个过程通常由编译器或解释器执行,以便执行相应的计算或操作。这篇博客文章,虽然链接...

    多赋值语句算术表达式解析器2.2.rar_表达式解析_表达式解析 C_表达式计算器_解析表达式

    本项目"多赋值语句算术表达式解析器2.2"就是一个专注于处理这种任务的工具,尤其在C语言环境下。这个解析器能够处理包含多个赋值语句以及复杂算术和函数表达式的计算。 首先,让我们了解一下"表达式解析"。在编程中...

    解析字符串,按照运算表达式来计算出最终结果值.rar

    例如,一个简单的数学表达式解析器可能会识别加法、减法、乘法和除法运算符,并正确地处理操作数的优先级。 3. **C#语法与运算符**: - C#支持多种运算符,包括算术运算符(+,-,*,/,%),比较运算符(==,!=,...

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

    这个名为"Applet表达式解析器"的项目显然专注于处理数学表达式的解析,特别是使用了递归下降解析法来实现。递归下降解析是编译原理中的一个关键概念,常用于解释性或编译性语言的语法分析阶段,它将语法规则转化为一...

    c++数学表达式解析

    在C++编程中,实现一个数学表达式解析器是一项常见的任务,它允许程序处理和求解用户输入的数学表达式。本项目旨在提供一个简单易懂的C++计算器实现,支持括号和基本的四则运算(加、减、乘、除)。通过使用波兰...

    java实现简易算术表达式解析类

    在Java编程语言中,实现一个简易的算术表达式解析类是常见的任务,这涉及到编译原理中的词法分析和语法分析。此类的主要目的是能够接收一个包含加减乘除和括号的字符串表达式,然后正确地计算出其结果。在这个场景下...

    java表达式计算支持自定义运算

    3. **构建表达式解析器**:为了处理包含自定义运算符的表达式,我们需要构建一个表达式解析器。解析器负责读取输入的字符串表达式,识别其中的运算符和操作数,并调用对应的运算方法。这可能涉及到词法分析和语法...

    【转】表达式解析器

    在本文中,我们将深入探讨“表达式解析器”的概念,特别是在C++环境下如何实现一个能够处理四则运算、三角函数、开方以及幂运算的解析器。表达式解析器是编程语言理论的一个重要组成部分,它负责将人类可读的数学或...

    四则运算表达式计算器

    在IT领域,构建一个“四则运算表达式计算器”是一个基础但重要的任务,它涉及到编程语言中的算术运算、表达式解析以及错误处理等关键概念。这个计算器能够处理加法、减法、乘法和除法这四种基本的数学运算,并且具备...

    VC++中运算表达式字符串解析求值(四则运算,三角和反三角函数等)

    通过阅读和理解这段代码,你可以学习到如何在VC++中自定义实现一个表达式解析器,以及如何结合C++标准库进行数学运算。 总之,理解和实现这样的功能对提升VC++编程技能非常有帮助,它涉及到字符串处理、数据结构、...

    在SourceForge上看到的一个Python写的表达式解析器

    在SourceForge上发现的这个Python写的表达式解析器是一个用于解析数学表达式的工具。它可能是利用了Python的灵活性和丰富的库来构建一个高效且易用的解析系统。在本文中,我们将深入探讨表达式解析器的工作原理、...

    数学表达式解析器(中缀表达式求值)

    在计算机科学领域,数学表达式解析器是一种程序,它能够接收数学表达式的字符串形式,并将其转化为可执行的形式,以便计算出结果。在这个项目中,我们关注的是一个使用C/C++编程语言实现的数学表达式解析器,它基于...

Global site tag (gtag.js) - Google Analytics