Given some MathML content:
<apply>
<eq/>
<ci>c</ci>
<apply>
<plus/>
<ci>a</ci>
<ci>b</ci>
</apply>
</apply>
and
std::map<std::string,std::double> cal;
cal["a"] = 1.;
cal["b"] = 2.;
cal["c"] = 0; // does not matter what c is
I wish to evaluate the MathML and retrieve the results. Is there any way to do this?
MathML has both semantic and presentational mark-up. So a generic MathML parser for evaluation is not possible.
I don't know of an actual implementation, some quick Googling did not find any reasonable results, but it basically boils down to writing your Polish expression interpreter (as the example you gave is in Polish notation). The steps:
At the end you'll have your result on the stack.
One way is to find a Computer Algebra System (CAS) that can import mathml. Unfortunately, while a lot of software exports mathml, almost none of it reads it. Here are some related links for a few cas systems:
CasADi (not strictly a CAS, but can evaluate expressions): https://sourceforge.net/apps/trac/casadi/ticket/149
sympy: http://code.google.com/p/sympy/issues/detail?id=2971
matlab/mupad: http://www.mathworks.nl/help/toolbox/mupad/generate/MathML.html
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With