swift-math-parser
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,π, ande - 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.initMathParser.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.