Elex.Evaluator (Elex v0.3.0)
View SourceEvaluates a parsed expression AST to a runtime value.
evaluate/2 returns {:ok, result} | {:error, reason}. evaluate!/2 raises
RuntimeError or Decimal.Error on evaluation failures. For a string-based API,
prefer Elex.evaluate/2.
Examples
context = Elex.new_context() |> Elex.add_variable!("x", 10)
{:ok, ast, _} = Elex.Parser.parse("x + 5", context)
Elex.Evaluator.evaluate(ast, context)
#=> {:ok, #Decimal<15>}
Summary
Functions
Evaluates a parsed expression AST.
Same as evaluate/2, but returns the result or raises RuntimeError /
Decimal.Error.
Functions
@spec evaluate(term(), Elex.Context.t()) :: {:ok, Decimal.t() | boolean() | String.t() | nil | Elex.Quantity.t()} | {:error, String.t()}
Evaluates a parsed expression AST.
Parameters
ast- A parsed AST node fromElex.Parserctx- AElex.Contextwith variable values and functions
Returns
{:ok, result}- The evaluated result (Decimal.t(),boolean(),String.t(),nil, orElex.Quantity.t()){:error, reason}- A human-readable error message
Examples
context = Elex.new_context() |> Elex.add_variable!("x", 10)
{:ok, ast, _} = Elex.Parser.parse("x * 2", context)
Elex.Evaluator.evaluate(ast, context)
#=> {:ok, #Decimal<20>}
@spec evaluate!(term(), Elex.Context.t()) :: Decimal.t() | boolean() | String.t() | nil | Elex.Quantity.t()
Same as evaluate/2, but returns the result or raises RuntimeError /
Decimal.Error.
Examples
context = Elex.new_context() |> Elex.add_variable!("x", 10)
{:ok, ast, _} = Elex.Parser.parse("x * 2", context)
Elex.Evaluator.evaluate!(ast, context)
#=> #Decimal<20>