var Mexp=require('./lexer.js'); Mexp.prototype.toPostfix = function () { 'use strict'; var post=[],elem,popped,prep,pre,ele; var stack=[{value:"(",type:4,pre:0}]; var arr=this.value; for (var i=1; i < arr.length; i++) { if(arr[i].type===1||arr[i].type===3||arr[i].type===13){ //if token is number,constant,or n(which is also a special constant in our case) if(arr[i].type===1) arr[i].value=Number(arr[i].value); post.push(arr[i]); } else if(arr[i].type===4){ stack.push(arr[i]); } else if(arr[i].type===5){ while((popped=stack.pop()).type!==4){ post.push(popped); } } else if(arr[i].type===11){ while((popped=stack.pop()).type!==4){ post.push(popped); } stack.push(popped); } else { elem=arr[i]; pre=elem.pre; ele=stack[stack.length-1]; prep=ele.pre; var flag=ele.value=='Math.pow'&&elem.value=='Math.pow'; if(pre>prep)stack.push(elem); else { while(prep>=pre&&!flag||flag&&pre