Iteraptor.AST (iteraptor v1.13.0) View Source
Iteraptor.AST module traverses AST, allowing map, reduce and family.
Link to this section Summary
Link to this section Functions
Specs
Mapper for the AST.
Parameters
input: the AST to traversefun: the function to be called on the tree elementopts: the options to be passed to the iterationyield::all | nilwhat to yield; default:nilfor yielding values only.
Examples
iex> bindings = [a: 1, b: 2, c: 3]
...> ":math.sin(42 * a / (3.14 * b)) > c"
...> |> Iteraptor.AST.map(fn
...> {var, _, val} when is_atom(val) -> bindings[var]
...> any -> any
...> end)
{:>, [line: 1],
[
{{:., [line: 1], [:math, :sin]}, [line: 1],
[
{:/, [line: 1],
[
{:*, [line: 1], [42, 1]},
{:*, [line: 1], [3.14, 2]}
]}
]},
3
]}
Specs
reduce( binary() | {atom(), list(), any()} | list(), any(), (any(), any() -> any()), list() ) :: any()
Reduces the AST with an accumulator.
Parameters
input: the AST to traverseacc: the accumulatorfun: the function to be called on the tree elementopts: the options to be passed to the iterationyield::all | nilwhat to yield; default:nilfor yielding values only.
Examples
iex> ":math.sin(42 * a / (3.14 * b)) > c"
...> |> Iteraptor.AST.reduce([], fn
...> {var, _, val}, acc when is_atom(val) -> [var | acc]
...> _, acc -> acc
...> end)
...> |> Enum.reverse()
~w|a b c|a