Packages

Mathematical expression parser and evaluator in Elixir. Tags: math, parse, parser, eval

Current section

Files

Jump to
abacus lib abacus.ex
Raw

lib/abacus.ex

defmodule Abacus do
def eval(expr) do
eval(expr, %{})
end
def eval(string, scope) when is_binary(string) do
{:ok, expr} = string
|> parse
expr
|> eval(scope)
end
def eval(charlist, scope) when is_bitstring(charlist) do
{:ok, expr} = charlist
|> parse
expr
|> eval(scope)
end
def eval(expr, scope) do
try do
{:ok, Abacus.Eval.eval(expr, scope)}
rescue
error -> {:error, error}
end
end
def parse(string) do
{:ok, tokens} = lex(string)
:math_term_parser.parse(tokens)
end
defp lex(string) when is_binary(string) do
string
|> String.to_charlist
|> lex
end
defp lex(string) do
{:ok, tokens, _} = :math_term.string(string)
{:ok, tokens}
end
end