S -> FORMULA
BOOL_EXP -> BOOL_EXP OPBOOL BOOL_EXP_T | BOOL_EXP_T

BOOL_EXP_T -> MINUSLETTER | DIGIT_0
    | DIGIT_1
    | OVERLINE MUTE_LBRACE BOOL_EXP MUTE_RBRACE
    | MUTE_LBRACE BOOL_EXP MUTE_RBRACE
    | OPENP BOOL_EXP CLOSEP

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
    | BOOL_EXP
    | BOOL_EXP OPEQ BOOL_EXP

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
    | PARTIAL LETTER
    | 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 ASTERISK
    | LETTER SUP MUTE_LBRACE PRIME MUTE_RBRACE
    | LETTER PRIME
    | LETTER SUP PRIME
    | LANGLE LETTER COMMA LETTER RANGLE

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
    | \omega
    | \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

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

OTHER -> \infty
SETS -> \Real | CAPLETTER

SYMBOL -> DIGIT | LETTER
    | OTHER

SYMB_OR_BRACED_SYMB -> SYMBOL | MUTE_LBRACE SYMB_OR_BRACED_SYMB MUTE_RBRACE

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

OPBOOL -> \wedge | \vee
    | DOT
    | PLUS

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
PARTIAL -> \partial
PLUS -> +
PRIME -> \prime | '

QUANTIFIER_OP -> \in
QUANTIFIER_SYMB -> \forall | \exists

SET_OP -> \supset | \subset
    | \cap
    | \cup
    | 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

LANGLE -> \langle
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

RANGLE -> \rangle
RBRACE -> \}
RBRACKET -> ]
RIGHT -> \right
RP -> ) | \)

SUB -> _
SUP -> ^
TIMES -> \times
VBAR -> | | \|

VBARDBOUBLE -> VBAR VBAR
LIMITS_LAYOUT -> \limits
MUTE_LBRACE -> {
MUTE_RBRACE -> }
OVERLINE -> \overline
