S -> FORMULA

CONTISUM -> INTEGRAL SUB SYMB_OR_BRACED_EXP SUP SYMB_OR_BRACED_EXP CONTISUM_END
    | INTEGRAL LIMITS_LAYOUT SUB SYMB_OR_BRACED_EXP SUP SYMB_OR_BRACED_EXP CONTISUM_END
    | INTEGRAL SUP SYMB_OR_BRACED_EXP SUB SYMB_OR_BRACED_EXP CONTISUM_END
    | INTEGRAL CONTISUM_END

CONTISUM_END -> TERM
    | MUTE_LBRACE EXP MUTE_RBRACE

EXP -> OPSUM TERM_OR_BRACED_LR
    | TERM
    | OPSUM LEFTRIGHTPAIR
    | MUTE_LBRACE OPSUM TERM MUTE_RBRACE EXP
    | LEFTRIGHTPAIR
    | LIMIT

EXP_F_DEF -> LETTER ARROW EXP
    | LETTER ARROW EXP_F_DEF

EXP_LIST -> EXP_OR_BRACED_EXP COMMA EXP_LIST_R

EXP_LIST_R -> EXP_OR_BRACED_EXP COMMA EXP_LIST_R
    | DOTS COMMA EXP_LIST_R
    | DOTS
    | EXP_OR_BRACED_EXP

EXP_OR_BRACED_EXP -> MUTE_LBRACE EXP_OR_BRACED_EXP MUTE_RBRACE
    | EXP

FLOAT -> DIGIT DECIMALSEP DIGIT

FORMULA -> MUTE_LBRACE FORMULA MUTE_RBRACE
    | EXP
    | EXP_OR_BRACED_EXP OPEQ EXP_OR_BRACED_EXP
    | EXP_OR_BRACED_EXP OPEQ EXP_OR_BRACED_EXP OPEQ EXP_OR_BRACED_EXP
    | EXP_LIST
    | QUANTIFIER_LIST FORMULA
    | QUANTIFIER_LIST
    | SET_EXP
    | EXP_F_DEF

FRACTION -> FRACTIONBAR SYMB_OR_BRACED_EXP SYMB_OR_BRACED_EXP

FUNCTION -> FUNCTRIGO SUP SYMB_OR_BRACED_SYMB
    | FUNCLOG SUB SYMB_OR_BRACED_SYMB
    | FUNCLOG
    | FUNCTRIGO

LEFTRIGHTPAIR -> LEFTRIGHTPAIR OPSP LREND
    | LEFTRIGHTPAIR LREND
    | LREND LREND
    | LREND OPSP LREND

LREND -> DOTS
    | TERM
    | MUTE_LBRACE LEFTRIGHTPAIR MUTE_RBRACE

OPSP -> OPSUM
    | OPPROD

PAREXP -> OPENP EXP_OR_BRACED_EXP CLOSEP
    | OPENP EXP_LIST CLOSEP
    | OPEN_BRACKET EXP_LIST CLOSE_BRACKET
    | OPEN_BRACKET EXP_OR_BRACED_EXP CLOSE_BRACKET
    | OPEN_BRACE EXP_LIST CLOSE_BRACE
    | OPEN_BRACE EXP_OR_BRACED_EXP CLOSE_BRACE

QUANTIFIER_LIST -> QUANTIFIER_ONE
    | QUANTIFIER_ONE COMMA

QUANTIFIER_ONE -> QUANTIFIER_SYMB LETTER
    | QUANTIFIER_SYMB RANGE
    | RANGE

RANGE -> LETTER QUANTIFIER_OP SET_EXP
    | LETTER QUANTIFIER_OP PAREXP

SET_EXP -> SETS SET_OP SET_EXP
    | SETS
    | SETS SUP DIGIT

SYMB_OR_BRACED_EXP -> SYMBOL
    | MUTE_LBRACE EXP_OR_BRACED_EXP MUTE_RBRACE

TERM -> SYMBOL
    | FLOAT
    | SYMB_OR_BRACED_SYMB FACTORIAL
    | PAREXP
    | FUNCTION TERM_OR_BRACED_LR
    | TERM_OR_BRACED_LR SUP SYMB_OR_BRACED_EXP
    | TERM_OR_BRACED_LR SUP SYMB_OR_BRACED_EXP SUB SYMB_OR_BRACED_EXP
    | TERM_OR_BRACED_LR SUP FRACTION
    | PAREXP SUP SYMB_OR_BRACED_EXP
    | SYMB_OR_BRACED_SYMB SUB SYMB_OR_BRACED_EXP
    | MUTE_LBRACE WORD MUTE_RBRACE SUB SYMB_OR_BRACED_EXP
    | SYMB_OR_BRACED_SYMB SUB MUTE_LBRACE EXP_LIST MUTE_RBRACE
    | LETTER SUP MUTE_LBRACE PRIME MUTE_RBRACE
    | LETTER PRIME
    | LETTER SUP PRIME

TERM_OR_BRACED_LR -> MUTE_LBRACE LEFTRIGHTPAIR MUTE_RBRACE
    | TERM

FRACTIONBAR -> \frac

INTEGRATION -> OPEN_BRACKET EXP CLOSE_BRACKET SUP SYMB_OR_BRACED_EXP SUB SYMB_OR_BRACED_EXP
    | OPEN_BRACKET EXP CLOSE_BRACKET SUB SYMB_OR_BRACED_EXP SUP SYMB_OR_BRACED_EXP

LIMIT -> LIMITWORD SUB SUBLIMIT EXP
    | LIMITWORD EXP
    | FRACTION

LIMITWORD -> \lim

SERIES -> BIGOP TERM_OR_BRACED_EXP
    | BIGOP SUB SUBSERIES TERM_OR_BRACED_EXP
    | BIGOP SUB SUBSERIES SUP SYMB_OR_BRACED_EXP TERM_OR_BRACED_EXP
    | BIGOP SUP SYMB_OR_BRACED_EXP SUB SUBSERIES TERM_OR_BRACED_EXP

SUBLIMIT -> SYMB_OR_BRACED_SYMB
    | MUTE_LBRACE SYMB_OR_BRACED_SYMB ARROW EXP MUTE_RBRACE

SUBSERIES -> SYMB_OR_BRACED_EXP
    | MUTE_LBRACE SYMB_OR_BRACED_SYMB OPEQ EXP MUTE_RBRACE
    | MUTE_LBRACE SUBSERIES MUTE_RBRACE
    | SERIES
    | CONTISUM
    | INTEGRATION

TERM_OR_BRACED_EXP -> MUTE_LBRACE EXP_OR_BRACED_EXP MUTE_RBRACE
    | TERM

SQRT -> \sqrt
    | SQRT SYMB_OR_BRACED_EXP
    | SQRT PAREXP
    | OPENVBAR EXP_OR_BRACED_EXP CLOSEVBAR
    | LEFT VBAR EXP_OR_BRACED_EXP RIGHT VBAR
    | MUTE_LBRACE TERM MUTE_RBRACE

LETTER_D -> d

MINUSLETTER -> a
    | b
    | c
    | LETTER_D

CAPLETTER -> A
    | B
    | C
    | E
    | F
    | G
    | H
    | I
    | L
    | M
    | N
    | P
    | R
    | S
    | T
    | V
    | X
    | Y

DIGIT -> DIGIT_0
    | DIGIT_1
    | 2
    | 3
    | 4
    | 5
    | 6
    | 7
    | 8
    | 9

DIGIT_0 -> 0

DIGIT_1 -> 1

GREEKLETTER -> \alpha
    | \beta
    | \lambda
    | \gamma
    | \phi
    | \pi
    | \theta
    | \mu
    | \sigma
    | \Delta

LETTER -> CAPLETTER
    | MINUSLETTER
    | GREEKLETTER
    | e
    | f
    | g
    | h
    | i
    | j
    | k
    | l
    | n
    | m
    | o
    | p
    | q
    | r
    | s
    | t
    | u
    | v
    | w
    | x
    | y
    | z

OPSUM -> PLUS

WORD -> LETTER LETTER
    | LETTER WORD
    | MUTE_LBRACE WORD MUTE_RBRACE

OTHER -> \infty

SETS -> CAPLETTER

SYMBOL -> DIGIT
    | LETTER
    | OTHER

SYMB_OR_BRACED_SYMB -> SYMBOL
    | MUTE_LBRACE SYMB_OR_BRACED_SYMB MUTE_RBRACE

OPPROD -> \div
    | TIMES
    | /
    | \cdot
    | DOT
    | MUTE_LBRACE OPPROD MUTE_RBRACE
    | -
    | \pm
    | MUTE_LBRACE OPSUM MUTE_RBRACE

BIGOP -> \sum

FUNCLOG -> \log
    | MUTE_LBRACE FUNCLOG MUTE_RBRACE

FUNCTRIGO -> \sin
    | \cos
    | \tan
    | MUTE_LBRACE FUNCTRIGO MUTE_RBRACE

DOTS -> \cdots
    | \ldots
    | DOT DOT DOT

EQ -> =
    | \neq

INEQ -> \leq
    | \lt
    | &lt;
    | \gt
    | &gt;
    | \geq

OPEQ -> EQ
    | INEQ

COMMA -> ,

DECIMALSEP -> DOT
    | COMMA

ARROW -> \rightarrow
    | \to

DOT -> .

FACTORIAL -> !

INTEGRAL -> \int

PLUS -> +

PRIME -> \prime
    | '

QUANTIFIER_OP -> \in

QUANTIFIER_SYMB -> \forall
    | \exists

SET_OP -> TIMES

BIG -> \Bigg
    | \Big

CLOSEP -> RP
    | RIGHT RP
    | BIG RP

CLOSEVBAR -> VBAR
    | RIGHT VBAR
    | BIG VBAR

CLOSE_BRACE -> RBRACE
    | RIGHT RBRACE
    | RIGHT MUTE_RBRACE

CLOSE_BRACKET -> RBRACKET
    | RIGHT RBRACKET

LBRACE -> \{

LBRACKET -> [

LEFT -> \left

LP -> (
    | \(

OPENP -> LP
    | LEFT LP
    | BIG LP

OPENVBAR -> VBAR
    | LEFT VBAR
    | BIG VBAR

OPEN_BRACE -> LBRACE
    | LEFT LBRACE
    | LEFT MUTE_LBRACE

OPEN_BRACKET -> LBRACKET
    | LEFT LBRACKET

RBRACE -> \}

RBRACKET -> ]

RIGHT -> \right

RP -> )
    | \)

SUB -> _

SUP -> ^

TIMES -> \times

VBAR -> |

VBARDBOUBLE -> \|
    | VBAR VBAR

LIMITS_LAYOUT -> \limits

MUTE_LBRACE -> {

MUTE_RBRACE -> }

OVERLINE -> \overline
