formula_evaluator.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. var Mexp=require('./postfix_evaluator.js');
  2. Mexp.prototype.formulaEval = function () {
  3. "use strict";
  4. var stack=[],pop1,pop2,pop3;
  5. var disp=[];
  6. var temp='';
  7. var arr=this.value;
  8. for(var i=0;i<arr.length;i++){
  9. if(arr[i].type===1||arr[i].type===3){
  10. disp.push({value:arr[i].type===3?arr[i].show:arr[i].value,type:1});
  11. }
  12. else if(arr[i].type===13){
  13. disp.push({value:arr[i].show,type:1});
  14. }
  15. else if(arr[i].type===0){
  16. disp[disp.length-1]={value:arr[i].show+(arr[i].show!="-"?"(":"")+disp[disp.length-1].value+(arr[i].show!="-"?")":""),type:0};
  17. }
  18. else if(arr[i].type===7){
  19. disp[disp.length-1]={value:(disp[disp.length-1].type!=1?"(":"")+disp[disp.length-1].value+(disp[disp.length-1].type!=1?")":"")+arr[i].show,type:7};
  20. }
  21. else if(arr[i].type===10){
  22. pop1=disp.pop();
  23. pop2=disp.pop();
  24. if(arr[i].show==='P'||arr[i].show==='C')disp.push({value:"<sup>"+pop2.value+"</sup>"+arr[i].show+"<sub>"+pop1.value+"</sub>",type:10});
  25. else disp.push({value:(pop2.type!=1?"(":"")+pop2.value+(pop2.type!=1?")":"")+"<sup>"+pop1.value+"</sup>",type:1});
  26. }
  27. else if(arr[i].type===2||arr[i].type===9){
  28. pop1=disp.pop();
  29. pop2=disp.pop();
  30. disp.push({value:(pop2.type!=1?"(":"")+pop2.value+(pop2.type!=1?")":"")+arr[i].show+(pop1.type!=1?"(":"")+pop1.value+(pop1.type!=1?")":""),type:arr[i].type});
  31. }
  32. else if(arr[i].type===12){
  33. pop1=disp.pop();
  34. pop2=disp.pop();
  35. pop3=disp.pop();
  36. disp.push({value:arr[i].show+"("+pop3.value+","+pop2.value+","+pop1.value+")",type:12});
  37. }
  38. }
  39. return disp[0].value;
  40. };
  41. module.exports=Mexp;