Математические выражения для 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>

Я пытаюсь найти решение С# для этой вещи и много искал для этого, но не нашел особой помощи. Если кто-нибудь знает какой-либо ресурс, чтобы начать работу с этой функциональностью, пожалуйста, дайте мне знать. Любая помощь будет оценена.


person Saurabh Palatkar    schedule 09.10.2014    source источник


Ответы (1)


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

Используйте метод ToMathML(expression) класса Parser, чтобы преобразовать выражение в MathML.

Он также поставляется с тестовой программой командной строки для тестирования синтаксического анализатора, команда для генерации MathML — это ml:

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.

Не стесняйтесь раскошелиться и продолжить работу над ним.

person pln    schedule 09.10.2014