后缀表达式 求值运算 javascript版

原文  http://www.bujiaban.net/wordpress/?p=229

 

完整的中缀转后缀,并求值的代码文件在这里

代码文件里支持log,cos,sin,tan这些函数,如1+log(tan(10))*2 ,含有这些函数的四则运算都是支持的,并可以轻松扩展。

在这里的表达式运算支持上做个计算器神马的,都是很容易的事情,下篇是 web app 版的计算器

中缀表达式转后缀表达式 请看上篇 中缀转后缀表达式

大致步骤:

/**
*	后缀表达式,从左到右读取,依次压栈,如果是操作符,入栈,如果是操作数,从栈弹两个元素出来运算,再将运算结果压入栈
*/
function calculate(stock_postfix/*四则运算 不含函数的,函数已递归解决了,栈表示的后缀表达式,底到上 对应左到右*/)
{
	if( null == stock_postfix || 0 == stock_postfix.size() )
		return '表达式错误';		

	var stock_result=new stock();//
	while( null != stock_postfix.top())
	{
		switch( stock_postfix.top().type )
		{
			case 1:
			{//操作数
				stock_result.push(stock_postfix.pop());
				break;
			}//case
			case 2:
			{
				var value_2=stock_result.pop();
				var value_1=stock_result.pop();
				if( null == value_1 || null == value_2 )
					return '表达式错误';
				stock_result.push(new node(1,eval(value_1.value+stock_postfix.pop().value+value_2.value),0));
				break;
			}//case
			case 3:
			{

			}//case
			default:
				stock_postfix.pop();
				break;
		}//switch
	}//while

	return stock_result.pop().value;
}//fun
 

 

posted @ 2012-04-26 23:41  toxot  阅读(334)  评论(0编辑  收藏  举报