An abstract syntax tree that represents pure mathematical expressions. Unlike most versions of a
tree for math, the goal is not to evaluate or transform mathematical expressions, but rather to
have a useful shared representation of various math typesetting approaches. This means that, for
instance, free variables are fine.

File to deal with arbitrary delimiter pairs.

This module defines the `Formatter`

trait, representing a given output format that can serialize
`AST`

s. This is where all of the formatting logic is held: `AST`

s themselves only store the
structure of data, not how that structure is represented.

This module provides all of the formatters supported by this crate.

Defines operators for each symbol and their precedence.

Common interface for parsers that can create abstract syntax trees.

This module provides an ergonomic way of defining new symbols and building up a library of
mathematical symbols to recognize and parse without custom specifications. Specifically, the
approach this module takes is to split symbols into several distinct types that share a common
structure, and then to implement generic Symbol conversions for those more specific types. This
gives us the flexibility of Symbol when we need it, but allows us to save a lot of boilerplate
when defining, for instance, every single trig function or letter.