From 26105034da4fcce7ac883c899d781f016559310d Mon Sep 17 00:00:00 2001 From: ruki Date: Thu, 8 Nov 2018 00:38:48 +0800 Subject: switch to vuepress --- .../math-expression-evaluator/src/postfix.js | 50 ++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100755 node_modules/math-expression-evaluator/src/postfix.js (limited to 'node_modules/math-expression-evaluator/src/postfix.js') diff --git a/node_modules/math-expression-evaluator/src/postfix.js b/node_modules/math-expression-evaluator/src/postfix.js new file mode 100755 index 00000000..9c8dd424 --- /dev/null +++ b/node_modules/math-expression-evaluator/src/postfix.js @@ -0,0 +1,50 @@ + + 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