Basic math expression parser built with Point•Free’s
swift-parsing package.

NOTE: currently, this uses a fork of that fixes a parsing bug involving floating-point literals that have a trailing
‘e’ or ‘E’ specifier.

let parser = MathParser()
let evaluator = parser.parse('4 * sin(t * π) + 2 * sin(t * π)')
let v1 = evaluator.eval("t", value: 0.0) // 0.0
let v2 = evaluator.eval("t", value: 0.5) // 6.0
let v3 = evaluator.eval("t", value: 1.0) // 0.0

The parser will return nil if it is unable to completely parse the expression.

By default, the expression parser and evaluator handle the following symbols and functions:

  • Symbols: pi, π, and e
  • Functions: sin, cos, tan, log10, ln/loge, log2, exp, ceil, floor, round, sqrt

You can reference additional symbols or variables and functions by providing your own mapping functions. There are two
places where this can be done:

  • MathParser.init
  • MathParser.Evaluator.eval

If a symbol or function does not exist during an eval call, the final result will be NaN. If a symbol is defined in
during parsing, it will be replaced with the symbol value. Otherwise, it will be resolved during a future eval call.
Same for function calls — if the function is known during parsing and the argument is a known value, then it will be
replaced with the function result. Otherwise, the function call will take place during an eval call.


View Github