Shunting Algorithm
by egon
HTML
<style>
* {
font:normal 12px/16px Courier New, monospace;
padding: 0;
margin: 0;
};
</style>
<pre id="logDiv"></pre>
<script>
log = (function(){
var logDiv = document.getElementById("logDiv");
return function(context, args){
logDiv.innerHTML =
"<p>" + context + " : " + JSON.stringify(args) + "</p>" +
logDiv.innerHTML;
};
})();
</script>
JavaScript
function isNumber(n){
return !isNaN(parseFloat(n)) && isFinite(n);
}
calc = "3 4 +";
stack = calc.split(/\s+/);
args = [];
while (stack.length > 0){
token = stack.pop();
log("stck: ", stack);
log("tok: ", token);
if( isNumber(token)) {
log("value: ", token);
a = parseFloat(token);
args.push(a);
} else if( token == "+" ){
a = args.pop();
b = args.pop();
stack.push( a + b );
} else if ( token == "-" ){
a = args.pop();
b = args.pop();
stack.push( a - b );
} else if (token == "sin" ){
a = args.pop();
stack.push( Math.sin(a) )
} else {
log("err: ", token);
throw "up";
}
}