如何评估MathML表达式?

8

假设有一些 MathML 内容:

<apply>
  <eq/>
  <ci>c</ci>
  <apply>
    <plus/>
    <ci>a</ci>
    <ci>b</ci>
  </apply>
</apply>

并且。
std::map<std::string,std::double> cal;
cal["a"] = 1.;
cal["b"] = 2.;
cal["c"] = 0; // does not matter what c is

我希望评估MathML并检索结果。有没有什么方法可以实现?


我之所以问这个问题,是因为我不想重复造轮子。我相当有信心自己编写代码。不需要提供可能的实现建议。 - sep
不需要任何展示。我只需要评估翻译后的文本。 - sep
有人能推荐一个可以附加的C/C++数学计算库吗?即使它不处理MathML也可以。 - sep
2个回答

3

MathML同时具有语义和表现形式的标记。因此,无法使用通用的MathML解析器进行评估。

我不知道是否有实际的实现,快速搜索也没有找到任何合理的结果,但基本上可以归结为编写您的波兰式表达式解释器(因为您给出的示例是以波兰符号表示的)。步骤如下:

  1. 获取XML解析器并读取文档
  2. 遍历树
  3. 如果遇到已知的操作或元素,请将其弹出到堆栈上
  4. 当子表达式完成时,解析它(或更好的方法是等待整个表达式完成,查找最后一个操作,按其数量规定的参数数目执行它,并重复此过程直到没有剩余操作)

最后,您将在堆栈上得到结果。


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接