2014-10-09 2 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# решение этой вещи и гугле много для этого, но не нашел большую помощь. Если кто-нибудь знает какой-либо ресурс, чтобы начать работу с этой функцией, пожалуйста, дайте мне знать. Любая помощь будет принята с благодарностью.

ответ

4

Я создал базовое выражение для парсера MathML из анализатора, который я имел с тех пор раньше. Вы можете загрузить или развить result here at BitBucket. (скачать ссылку слева).

Используйте метод ToMathML(expression) класса Parser для преобразования выражения в 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.

Не стесняйтесь разветвлять его и продолжать работать над ним.

Смежные вопросы