The code consists of two classes in order to parse the MathML string. The first class, MathToString prepares the string. The second class, ParseML, does the parsing. Similarly, to get MathML code from text one class prepares and the other does the conversion.

## Introduction

There seems to be few resources converting MathML code into plain text. A good reason is there is no consensus in how to format some math expressions. But for many expressions involving (+,-,/,*,^,=) operators, here is one possible converter.

## The Classes Engaged

- Class
`MathToString`

prepares the `string`

with the `MathML`

code so that `class ParseML`

can perform the detailed parsing.

## Preparation

First, the spaces are replaced by empty strings and some special characters are replaced too. Also, some tags not involved in the math expression, like `style`

tags, are removed. Then the code goes over from the most insider `<mfrac>...</mfrac>, <msup>...</msup>, <mrow>...</mrow>, <msqrt>...</msqrt> `

tags to the most outer, being parsed and replaced, enclosing them in between special characters so that later they can be recovered by `ParseML`

class.

## Using the Code

To convert, just call the shared method `MathToString.convertToString()`

:

Dim converted as String = MathMLToString.convertToString(MathMLcodeToConvert)

To convert text to MathML, call `convertStringToMathML()`

.

## Basic Principles

The parsing method is a recursive-descent parsing: Parsing Expressions by Recursive Descent.

Evaluation method `E`

calls `T`

for any addition or substraction, but `T`

calls first `F`

for any multiplication or substraction, and `F`

calls first `P`

for any power possible power operation. `P`

calls first `v`

to get next token. If there is a "`(`

" token, `v`

calls recursively to `T`

.

E --> T {( "+" | "-" ) T}
T --> F {( "*" | "/" ) F}
F --> P ["^" F]
P --> v | "(" E ")" | "-" T

## History

- 12
^{th} May, 2022: Initial version