Elex.Evaluator (Elex v0.3.0)

View Source

Evaluates 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

evaluate(ast, ctx)

@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

Returns

  • {:ok, result} - The evaluated result (Decimal.t(), boolean(), String.t(), nil, or Elex.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>}

evaluate!(ast, ctx)

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