后缀表达式 求值运算 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

浙公网安备 33010602011771号