TO SUPPORT MY WORK, ORDER A COMMERCIAL LICENSE
THANK YOU!
Tutorial Math Collection API spec Download
Below is the code for JAVA, the code for C# is almost identical.
Calculation is a multi-step process and the CalculationStepsRegister class provides a register to store all the steps as a collection of CalculationStepRecord, also done in a recursive way.
Case 1: Simple Expression
import org.mariuszgromada.math.mxparser.*; ... Expression e = new Expression("2*(3+4)+5"); CalcStepsRegister calcStepsRegister = new CalcStepsRegister(); mXparser.consolePrintln(e.getExpressionString() + " = " + e.calculate(calcStepsRegister)); mXparser.consolePrintln("----"); /* Printing content of all the calculation steps */ for (CalcStepRecord step : calcStepsRegister.calcStepRecords) mXparser.consolePrintln(step.content);
[mXparser-v.5.0.3] 2*(3+4)+5 = 19.0 [mXparser-v.5.0.3] ---- [mXparser-v.5.0.3] 2*(3+4)+5 [mXparser-v.5.0.3] 2*(7)+5 [mXparser-v.5.0.3] 2*7+5 [mXparser-v.5.0.3] 14+5 [mXparser-v.5.0.3] 19
Case 2: Dependent User Argument
import org.mariuszgromada.math.mxparser.*; ... Argument x = new Argument("x", "2*(3+4)+5"); CalcStepsRegister calcStepsRegister = new CalcStepsRegister(); mXparser.consolePrintln(x.getArgumentName() + " = " + x.getArgumentValue(calcStepsRegister)); mXparser.consolePrintln("----"); /* Printing a bit more just than the steps content */ mXparser.consolePrintln("calcStepsRegister.argumentNameStart = " + calcStepsRegister.argumentNameStart); mXparser.consolePrintln("calcStepsRegister.expressionStringStart = " + calcStepsRegister.expressionStringStart); mXparser.consolePrintln("calcStepsRegister.result = " + calcStepsRegister.result); mXparser.consolePrintln("calcStepsRegister.computingTime = " + calcStepsRegister.computingTime); mXparser.consolePrintln("----"); for (CalcStepRecord step : calcStepsRegister.calcStepRecords) mXparser.consolePrintln(step.numberGroupWithin + ". " + step.content);
[mXparser-v.5.0.3] x = 19.0 [mXparser-v.5.0.3] ---- [mXparser-v.5.0.3] calcStepsRegister.argumentNameStart = x [mXparser-v.5.0.3] calcStepsRegister.expressionStringStart = 2*(3+4)+5 [mXparser-v.5.0.3] calcStepsRegister.result = 19.0 [mXparser-v.5.0.3] calcStepsRegister.computingTime = 0.062 [mXparser-v.5.0.3] ---- [mXparser-v.5.0.3] 1. 2*(3+4)+5 [mXparser-v.5.0.3] 2. 2*(7)+5 [mXparser-v.5.0.3] 3. 2*7+5 [mXparser-v.5.0.3] 4. 14+5 [mXparser-v.5.0.3] 4. 19
Case 3: User Function
import org.mariuszgromada.math.mxparser.*; ... Function f = new Function("f(x) = x*(2*(3+4)+5)"); CalcStepsRegister calcStepsRegister = new CalcStepsRegister(); f.setArgumentValue(0, 2); mXparser.consolePrintln(f.getFunctionName() + " = " + f.calculate(calcStepsRegister)); mXparser.consolePrintln("----"); /* Printing a bit more just than the steps content - adding step type */ mXparser.consolePrintln("calcStepsRegister.functionNameStart = " + calcStepsRegister.functionNameStart); mXparser.consolePrintln("calcStepsRegister.expressionStringStart = " + calcStepsRegister.expressionStringStart); mXparser.consolePrintln("calcStepsRegister.result = " + calcStepsRegister.result); mXparser.consolePrintln("calcStepsRegister.computingTime = " + calcStepsRegister.computingTime); mXparser.consolePrintln("----"); for (CalcStepRecord step : calcStepsRegister.calcStepRecords) mXparser.consolePrintln(step.type + " " + step.numberGroupWithin + ". " + step.content);
[mXparser-v.5.0.3] f = 38.0 [mXparser-v.5.0.3] ---- [mXparser-v.5.0.3] calcStepsRegister.functionNameStart = f [mXparser-v.5.0.3] calcStepsRegister.expressionStringStart = x*(2*(3+4)+5) [mXparser-v.5.0.3] calcStepsRegister.result = 38.0 [mXparser-v.5.0.3] calcStepsRegister.computingTime = 0.031 [mXparser-v.5.0.3] ---- [mXparser-v.5.0.3] Function 1. x*(2*(3+4)+5) [mXparser-v.5.0.3] Function 2. 2*(2*(7)+5) [mXparser-v.5.0.3] Function 3. 2*(2*7+5) [mXparser-v.5.0.3] Function 4. 2*(14+5) [mXparser-v.5.0.3] Function 5. 2*(19) [mXparser-v.5.0.3] Function 6. 2*19 [mXparser-v.5.0.3] Function 6. 38
Case 4: Expression referencing User Argument and User Function
import org.mariuszgromada.math.mxparser.*;
...
Argument x = new Argument("x", "2List(2,1,3,5,4)");
Argument y = new Argument("y = 2*x", x);
Argument z = new Argument("z = 3*y/x", x, y);
Function f = new Function("f(a,b) = a*b");
CalcStepsRegister calcStepsRegister = new CalcStepsRegister();
Expression e = new Expression("f(x,y)+z+(x*y)/z", x, y, z, f);
mXparser.consolePrintln(e.getExpressionString() + " = " + e.calculate(calcStepsRegister));
mXparser.consolePrintln("----");
/* Printing a bit more just than the steps content - adding step type */
for (CalcStepRecord step : calcStepsRegister.calcStepRecords)
mXparser.consolePrintln(step.numberGroup + "." + step.numberGroupWithin + " " + stringRepeat(" ", step.numberGroup - 1) + step.type + " " + step.content);
mXparser.consolePrintln("----");
/* Using built-in console print of steps register */
calcStepsRegister.consolePrint();
[mXparser-v.5.0.3] f(x,y)+z+(x*y)/z = 121.5 [mXparser-v.5.0.3] ---- [mXparser-v.5.0.3] 1.1 Expression f(x,y)+z+(x*y)/z [mXparser-v.5.0.3] 2.1 Argument 2*rList(2,1,3,5,4) [mXparser-v.5.0.3] 2.2 Argument 2*rList(2 1 3 5 4) [mXparser-v.5.0.3] 2.3 Argument 2*rList 2 1 3 5 4 [mXparser-v.5.0.3] 2.4 Argument 2*3 [mXparser-v.5.0.3] 2.4 Argument 6 [mXparser-v.5.0.3] 2.1 Argument 2*x [mXparser-v.5.0.3] 3.1 Argument 2*rList(2,1,3,5,4) [mXparser-v.5.0.3] 3.2 Argument 2*rList(2 1 3 5 4) [mXparser-v.5.0.3] 3.3 Argument 2*rList 2 1 3 5 4 [mXparser-v.5.0.3] 3.4 Argument 2*4 [mXparser-v.5.0.3] 3.4 Argument 8 [mXparser-v.5.0.3] 2.2 Argument 2*8 [mXparser-v.5.0.3] 2.2 Argument 16 [mXparser-v.5.0.3] 2.1 Argument 3*y/x [mXparser-v.5.0.3] 3.1 Argument 2*x [mXparser-v.5.0.3] 4.1 Argument 2*rList(2,1,3,5,4) [mXparser-v.5.0.3] 4.2 Argument 2*rList(2 1 3 5 4) [mXparser-v.5.0.3] 4.3 Argument 2*rList 2 1 3 5 4 [mXparser-v.5.0.3] 4.4 Argument 2*1 [mXparser-v.5.0.3] 4.4 Argument 2 [mXparser-v.5.0.3] 3.2 Argument 2*2 [mXparser-v.5.0.3] 3.2 Argument 4 [mXparser-v.5.0.3] 3.1 Argument 2*rList(2,1,3,5,4) [mXparser-v.5.0.3] 3.2 Argument 2*rList(2 1 3 5 4) [mXparser-v.5.0.3] 3.3 Argument 2*rList 2 1 3 5 4 [mXparser-v.5.0.3] 3.4 Argument 2*4 [mXparser-v.5.0.3] 3.4 Argument 8 [mXparser-v.5.0.3] 2.2 Argument 3*4/8 [mXparser-v.5.0.3] 2.3 Argument 12/8 [mXparser-v.5.0.3] 2.3 Argument 1.5 [mXparser-v.5.0.3] 2.1 Argument 2*rList(2,1,3,5,4) [mXparser-v.5.0.3] 2.2 Argument 2*rList(2 1 3 5 4) [mXparser-v.5.0.3] 2.3 Argument 2*rList 2 1 3 5 4 [mXparser-v.5.0.3] 2.4 Argument 2*4 [mXparser-v.5.0.3] 2.4 Argument 8 [mXparser-v.5.0.3] 2.1 Argument 2*x [mXparser-v.5.0.3] 3.1 Argument 2*rList(2,1,3,5,4) [mXparser-v.5.0.3] 3.2 Argument 2*rList(2 1 3 5 4) [mXparser-v.5.0.3] 3.3 Argument 2*rList 2 1 3 5 4 [mXparser-v.5.0.3] 3.4 Argument 2*3 [mXparser-v.5.0.3] 3.4 Argument 6 [mXparser-v.5.0.3] 2.2 Argument 2*6 [mXparser-v.5.0.3] 2.2 Argument 12 [mXparser-v.5.0.3] 2.1 Argument 3*y/x [mXparser-v.5.0.3] 3.1 Argument 2*x [mXparser-v.5.0.3] 4.1 Argument 2*rList(2,1,3,5,4) [mXparser-v.5.0.3] 4.2 Argument 2*rList(2 1 3 5 4) [mXparser-v.5.0.3] 4.3 Argument 2*rList 2 1 3 5 4 [mXparser-v.5.0.3] 4.4 Argument 2*2 [mXparser-v.5.0.3] 4.4 Argument 4 [mXparser-v.5.0.3] 3.2 Argument 2*4 [mXparser-v.5.0.3] 3.2 Argument 8 [mXparser-v.5.0.3] 3.1 Argument 2*rList(2,1,3,5,4) [mXparser-v.5.0.3] 3.2 Argument 2*rList(2 1 3 5 4) [mXparser-v.5.0.3] 3.3 Argument 2*rList 2 1 3 5 4 [mXparser-v.5.0.3] 3.4 Argument 2*3 [mXparser-v.5.0.3] 3.4 Argument 6 [mXparser-v.5.0.3] 2.2 Argument 3*8/6 [mXparser-v.5.0.3] 2.3 Argument 24/6 [mXparser-v.5.0.3] 2.3 Argument 4 [mXparser-v.5.0.3] 1.2 Expression f(6,16)+1.5+(8*12)/4 [mXparser-v.5.0.3] 1.3 Expression f(6 16)+1.5+(8*12)/4 [mXparser-v.5.0.3] 1.4 Expression f 6 16+1.5+(8*12)/4 [mXparser-v.5.0.3] 2.1 Function a*b [mXparser-v.5.0.3] 2.1 Function 96 [mXparser-v.5.0.3] 1.5 Expression 96+1.5+(8*12)/4 [mXparser-v.5.0.3] 1.6 Expression 96+1.5+(96)/4 [mXparser-v.5.0.3] 1.7 Expression 96+1.5+96/4 [mXparser-v.5.0.3] 1.8 Expression 96+1.5+24 [mXparser-v.5.0.3] 1.9 Expression 97.5+24 [mXparser-v.5.0.3] 1.9 Expression 121.5 [mXparser-v.5.0.3] ---- [mXparser-v.5.0.3] CalcStepsRegister for Expression f(x,y)+z+(x*y)/z, result = 121.5 [mXparser-v.5.0.3] gr = 1, nr = 1, first = true, last = false, type = Expression, descr = f(x,y)+z+(x*y)/z, step = f(x,y)+z+(x*y)/z [mXparser-v.5.0.3] gr = 2, nr = 1, first = true, last = false, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 2*rList(2,1,3,5,4) [mXparser-v.5.0.3] gr = 2, nr = 2, first = false, last = false, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 2*rList(2 1 3 5 4) [mXparser-v.5.0.3] gr = 2, nr = 3, first = false, last = false, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 2*rList 2 1 3 5 4 [mXparser-v.5.0.3] gr = 2, nr = 4, first = false, last = false, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 2*3 [mXparser-v.5.0.3] gr = 2, nr = 4, first = false, last = true, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 6 [mXparser-v.5.0.3] gr = 2, nr = 1, first = true, last = false, type = Argument, descr = 2*x, step = 2*x [mXparser-v.5.0.3] gr = 3, nr = 1, first = true, last = false, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 2*rList(2,1,3,5,4) [mXparser-v.5.0.3] gr = 3, nr = 2, first = false, last = false, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 2*rList(2 1 3 5 4) [mXparser-v.5.0.3] gr = 3, nr = 3, first = false, last = false, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 2*rList 2 1 3 5 4 [mXparser-v.5.0.3] gr = 3, nr = 4, first = false, last = false, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 2*4 [mXparser-v.5.0.3] gr = 3, nr = 4, first = false, last = true, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 8 [mXparser-v.5.0.3] gr = 2, nr = 2, first = false, last = false, type = Argument, descr = 2*x, step = 2*8 [mXparser-v.5.0.3] gr = 2, nr = 2, first = false, last = true, type = Argument, descr = 2*x, step = 16 [mXparser-v.5.0.3] gr = 2, nr = 1, first = true, last = false, type = Argument, descr = 3*y/x, step = 3*y/x [mXparser-v.5.0.3] gr = 3, nr = 1, first = true, last = false, type = Argument, descr = 2*x, step = 2*x [mXparser-v.5.0.3] gr = 4, nr = 1, first = true, last = false, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 2*rList(2,1,3,5,4) [mXparser-v.5.0.3] gr = 4, nr = 2, first = false, last = false, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 2*rList(2 1 3 5 4) [mXparser-v.5.0.3] gr = 4, nr = 3, first = false, last = false, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 2*rList 2 1 3 5 4 [mXparser-v.5.0.3] gr = 4, nr = 4, first = false, last = false, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 2*1 [mXparser-v.5.0.3] gr = 4, nr = 4, first = false, last = true, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 2 [mXparser-v.5.0.3] gr = 3, nr = 2, first = false, last = false, type = Argument, descr = 2*x, step = 2*2 [mXparser-v.5.0.3] gr = 3, nr = 2, first = false, last = true, type = Argument, descr = 2*x, step = 4 [mXparser-v.5.0.3] gr = 3, nr = 1, first = true, last = false, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 2*rList(2,1,3,5,4) [mXparser-v.5.0.3] gr = 3, nr = 2, first = false, last = false, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 2*rList(2 1 3 5 4) [mXparser-v.5.0.3] gr = 3, nr = 3, first = false, last = false, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 2*rList 2 1 3 5 4 [mXparser-v.5.0.3] gr = 3, nr = 4, first = false, last = false, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 2*4 [mXparser-v.5.0.3] gr = 3, nr = 4, first = false, last = true, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 8 [mXparser-v.5.0.3] gr = 2, nr = 2, first = false, last = false, type = Argument, descr = 3*y/x, step = 3*4/8 [mXparser-v.5.0.3] gr = 2, nr = 3, first = false, last = false, type = Argument, descr = 3*y/x, step = 12/8 [mXparser-v.5.0.3] gr = 2, nr = 3, first = false, last = true, type = Argument, descr = 3*y/x, step = 1.5 [mXparser-v.5.0.3] gr = 2, nr = 1, first = true, last = false, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 2*rList(2,1,3,5,4) [mXparser-v.5.0.3] gr = 2, nr = 2, first = false, last = false, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 2*rList(2 1 3 5 4) [mXparser-v.5.0.3] gr = 2, nr = 3, first = false, last = false, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 2*rList 2 1 3 5 4 [mXparser-v.5.0.3] gr = 2, nr = 4, first = false, last = false, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 2*4 [mXparser-v.5.0.3] gr = 2, nr = 4, first = false, last = true, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 8 [mXparser-v.5.0.3] gr = 2, nr = 1, first = true, last = false, type = Argument, descr = 2*x, step = 2*x [mXparser-v.5.0.3] gr = 3, nr = 1, first = true, last = false, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 2*rList(2,1,3,5,4) [mXparser-v.5.0.3] gr = 3, nr = 2, first = false, last = false, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 2*rList(2 1 3 5 4) [mXparser-v.5.0.3] gr = 3, nr = 3, first = false, last = false, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 2*rList 2 1 3 5 4 [mXparser-v.5.0.3] gr = 3, nr = 4, first = false, last = false, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 2*3 [mXparser-v.5.0.3] gr = 3, nr = 4, first = false, last = true, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 6 [mXparser-v.5.0.3] gr = 2, nr = 2, first = false, last = false, type = Argument, descr = 2*x, step = 2*6 [mXparser-v.5.0.3] gr = 2, nr = 2, first = false, last = true, type = Argument, descr = 2*x, step = 12 [mXparser-v.5.0.3] gr = 2, nr = 1, first = true, last = false, type = Argument, descr = 3*y/x, step = 3*y/x [mXparser-v.5.0.3] gr = 3, nr = 1, first = true, last = false, type = Argument, descr = 2*x, step = 2*x [mXparser-v.5.0.3] gr = 4, nr = 1, first = true, last = false, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 2*rList(2,1,3,5,4) [mXparser-v.5.0.3] gr = 4, nr = 2, first = false, last = false, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 2*rList(2 1 3 5 4) [mXparser-v.5.0.3] gr = 4, nr = 3, first = false, last = false, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 2*rList 2 1 3 5 4 [mXparser-v.5.0.3] gr = 4, nr = 4, first = false, last = false, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 2*2 [mXparser-v.5.0.3] gr = 4, nr = 4, first = false, last = true, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 4 [mXparser-v.5.0.3] gr = 3, nr = 2, first = false, last = false, type = Argument, descr = 2*x, step = 2*4 [mXparser-v.5.0.3] gr = 3, nr = 2, first = false, last = true, type = Argument, descr = 2*x, step = 8 [mXparser-v.5.0.3] gr = 3, nr = 1, first = true, last = false, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 2*rList(2,1,3,5,4) [mXparser-v.5.0.3] gr = 3, nr = 2, first = false, last = false, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 2*rList(2 1 3 5 4) [mXparser-v.5.0.3] gr = 3, nr = 3, first = false, last = false, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 2*rList 2 1 3 5 4 [mXparser-v.5.0.3] gr = 3, nr = 4, first = false, last = false, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 2*3 [mXparser-v.5.0.3] gr = 3, nr = 4, first = false, last = true, type = Argument, descr = x = 2*rList(2,1,3,5,4), step = 6 [mXparser-v.5.0.3] gr = 2, nr = 2, first = false, last = false, type = Argument, descr = 3*y/x, step = 3*8/6 [mXparser-v.5.0.3] gr = 2, nr = 3, first = false, last = false, type = Argument, descr = 3*y/x, step = 24/6 [mXparser-v.5.0.3] gr = 2, nr = 3, first = false, last = true, type = Argument, descr = 3*y/x, step = 4 [mXparser-v.5.0.3] gr = 1, nr = 2, first = false, last = false, type = Expression, descr = f(x,y)+z+(x*y)/z, step = f(6,16)+1.5+(8*12)/4 [mXparser-v.5.0.3] gr = 1, nr = 3, first = false, last = false, type = Expression, descr = f(x,y)+z+(x*y)/z, step = f(6 16)+1.5+(8*12)/4 [mXparser-v.5.0.3] gr = 1, nr = 4, first = false, last = false, type = Expression, descr = f(x,y)+z+(x*y)/z, step = f 6 16+1.5+(8*12)/4 [mXparser-v.5.0.3] gr = 2, nr = 1, first = true, last = false, type = Function, descr = f(a,b) = a*b, step = a*b [mXparser-v.5.0.3] gr = 2, nr = 1, first = false, last = true, type = Function, descr = f(a,b) = a*b, step = 96 [mXparser-v.5.0.3] gr = 1, nr = 5, first = false, last = false, type = Expression, descr = f(x,y)+z+(x*y)/z, step = 96+1.5+(8*12)/4 [mXparser-v.5.0.3] gr = 1, nr = 6, first = false, last = false, type = Expression, descr = f(x,y)+z+(x*y)/z, step = 96+1.5+(96)/4 [mXparser-v.5.0.3] gr = 1, nr = 7, first = false, last = false, type = Expression, descr = f(x,y)+z+(x*y)/z, step = 96+1.5+96/4 [mXparser-v.5.0.3] gr = 1, nr = 8, first = false, last = false, type = Expression, descr = f(x,y)+z+(x*y)/z, step = 96+1.5+24 [mXparser-v.5.0.3] gr = 1, nr = 9, first = false, last = false, type = Expression, descr = f(x,y)+z+(x*y)/z, step = 97.5+24 [mXparser-v.5.0.3] gr = 1, nr = 9, first = false, last = true, type = Expression, descr = f(x,y)+z+(x*y)/z, step = 121.5 [mXparser-v.5.0.3] Computing time = 0.047 s.
Nuget – Package Manager
Install-Package
MathParser.org-mXparser
-Version
5.0.6
dotnet add package
MathParser.org-mXparser
--version
5.0.6
<PackageReference Include=
"MathParser.org-mXparser"
Version=
"5.0.6"
/>
Maven – Dependency
<dependency>
<groupid>org.mariuszgromada.math
</groupid>
<artifactid>MathParser.org-mXparser
</artifactid>
<version>5.0.6
</version>
</dependency>
Maven – Gradle
implementation
'org.mariuszgromada.math:MathParser.org-mXparser:5.0.6'
Maven – Gradle (Kotlin)
implementation(
"org.mariuszgromada.math:MathParser.org-mXparser:5.0.6"
)
GitHub
git clone
https://github.com/mariuszgromada/MathParser.org-mXparser
OTHER DOWNLOAD OPTIONS
Download latest release – v.5.0.6 Leonis: .NET bin onlyDownload latest release – v.5.0.6 Leonis: JAVA bin onlyDownload latest release – v.5.0.6 Leonis: bin + doc
NEWS FROM MATHPARSER.ORG
SOURCE CODE
Source code .zipSource code .tar.gz
View on GitHubMathSpace.pl