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