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.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.