diff options
| author | ruki <waruqi@gmail.com> | 2018-11-08 00:38:48 +0800 |
|---|---|---|
| committer | ruki <waruqi@gmail.com> | 2018-11-07 21:53:09 +0800 |
| commit | 26105034da4fcce7ac883c899d781f016559310d (patch) | |
| tree | c459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/math-expression-evaluator/src/postfix.js | |
| parent | 2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff) | |
| download | xmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip | |
switch to vuepress
Diffstat (limited to 'node_modules/math-expression-evaluator/src/postfix.js')
| -rwxr-xr-x | node_modules/math-expression-evaluator/src/postfix.js | 50 |
1 files changed, 50 insertions, 0 deletions
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<prep){
+ popped=stack.pop();
+ ele=stack[stack.length-1];
+ post.push(popped);
+ prep=ele.pre;
+ flag=elem.value=='Math.pow'&&ele.value=='Math.pow';
+ }
+ stack.push(elem);
+ }
+ }
+ }
+ return new Mexp(post);
+ };
+ module.exports=Mexp;
\ No newline at end of file |
