Skip to content

danielgindi/SwiftEval

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Eval for Swift

Easily evaluate simple expressions on the go...

This is a port of the BigEval.js/Eval.net library

Features:

  • Evaluate basic math operators (5 * (4 / 3))
  • Use constants (x * 27 / 4)
  • Support for pre-defined function calls (30 * pow(24, 6) / cos(20))
  • Support for custom function calls
  • Support for logic operators (26 * 3 < 100 - returns a bool value)
  • Support for bitwise operators ((1 << 2) == 4)
  • Support for string values ("test" + 5 == "test5")
  • Customize the type that is used for numeric values in the expression.
  • Customize the code behind the execution of any of the operators.
  • Support for compiling an expression and running multiple times while supplying different constants

Installation

Just add the repo in Swift Package Manager

Usage

import Eval
        
let config = DoubleEvalConfiguration()

let result1 = try Evaluator.execute("12+45*10", config) as? Double
let result2 = try Evaluator.execute("30 * pow(24, 6) / cos(20)", config) as? Double

let compiled = try Evaluator.compile("5 * n", config.clone())

compiled.setConstant(8, forName: "n")
let result3 = try compiled.execute() as? Double

compiled.setConstant(9, forName: "n")
let result4 = try compiled.execute() as? Double

Operators

The operators currently supported in order of precedence are -

[
    ['!'],  // Factorial
    ['**'],  // power
    ['/', '*', '%'],
    ['+', '-'],
    ['<<', '>>'],  // bit shifts
    ['<', '<=', '>', '>='],
    ['==', '=', '!='],   // equality comparisons
    ['&'], ['^'], ['|'],   // bitwise operations
    ['&&'], ['||']   // logical operations
]

Me

Help

If you want to buy me a beer, you are very welcome to Donate Thanks :-)

License

This library is under the Apache License 2.0.

This library is free and can be used in commercial applications without royalty.