Abacus 
A parser for mathematical expressions.
https://hex.pm/packages/abacus
Usage
Abacus.eval(expression, scope)
Parses and evaluates the given expression. Variables can be supplied as a map of
binaries in the scope.
Examples
iex> Abacus.eval("1 + 1")
{:ok, 2}
iex> Abacus.eval("sin(floor(3 + 2.5)) / 3")
{:ok, -0.3196414248877128}
iex> Abacus.eval("a * b", %{"a" => 10, "b" => 10})
{:ok, 100}Abacus.parse(expression)
Parses the expression and returns the syntax tree.
Features
An incomplete list of supported and planned features
-
[x] basic operators (
+,-,*,/,^) -
[x] factorial (
!) -
[x] bitwise operators (
|,&,>>,<<,~,|^(xor)) -
[x] support for functions
-
[x] trigonometric functions(
sin,cos,tan) -
[x] floating point manipulation(
ceil,floor,round)
-
[x] trigonometric functions(
- [x] support for variables
- [ ] support for parsing units
- [ ] support for converting units
Installation
-
Add
abacusto your list of dependencies inmix.exs:
```elixir
def deps do
[{:abacus, "~> 0.4.0"}]
end
```-
Ensure
abacusis started before your application:
```elixir
def application do
[applications: [:abacus]]
end
```