2014-10-09 38 views
4

我試圖建立一個功能,如this site用戶將在文本區域中輸入數學表達式,然後它將呈現爲MathML格式。數學表達式MathML

例子:

Input expression string: cos(x^3) 

Then the expression should be converted to MathML as: 

<math xmlns='http://www.w3.org/1998/Math/MathML'> 
    <mrow> 
     <mi>cos</mi> 
     <mo>&#8289;</mo> 
     <mo>(</mo> 
     <msup> 
      <mi>x</mi> 
      <mn>3</mn> 
     </msup> 
     <mo>)</mo> 
    </mrow> 
</math> 

我試圖找到這件事情的C#解決方案和GOOGLE了很多關於這一點,但並沒有發現太大的幫助。 如果有人知道任何資源開始使用此功能,請讓我知道。 任何幫助將不勝感激。

回答

4

我從早先的解析器創建了MathML分析器的基本表達式。您可以下載或分發result here at BitBucket。 (下載鏈接在左邊)。

使用Parser類的ToMathML(expression)方法將表達式轉換爲MathML。

它還配備了一個命令行測試程序測試分析器,用於生成MATHML的命令毫升:

calc ~:> ml cos(x^3) 
<math xmlns='http://www.w3.org/1998/Math/MathML'><mrow><mi>cos</mi><mrow><mrow><mo>(</mo><mrow><msup><mi>x</mi><mn>3</mn></msup></mrow><mo>)</mo></mrow></mrow></mrow></math> 
calc ~:> ml 1/(x-1) 
<math xmlns='http://www.w3.org/1998/Math/MathML'><mrow><mfrac><mn>1</mn><mrow><mrow><mo>(</mo><mrow><mi>x</mi><mo>-</mo><mn>1</mn></mrow><mo>)</mo></mrow></mrow></mfrac></mrow></math> 
calc ~:> 

有一個在解析器沒有隱含的乘法,所以你必須總是在表達式中使用* (如2 * x)。

希望它對您的方案有用。我想這取決於你需要的全功能。在目前的形式中,解析器會將表達式轉換爲MathML的一個非常基本的子集。

隨意分叉它並繼續工作。