Predicator.Visitor behaviour (predicator v3.8.0)

Copy Markdown View Source

Behaviour for AST visitors.

Visitors implement the visitor pattern to traverse and transform Abstract Syntax Trees into various representations.

Examples

defmodule MyVisitor do
  @behaviour Predicator.Visitor

  @impl true
  def visit({:literal, value}, _opts) do
    value
  end

  @impl true
  def visit({:identifier, name}, _opts) do
    name
  end

  @impl true
  def visit({:comparison, op, left, right}, opts) do
    left_result = visit(left, opts)
    right_result = visit(right, opts)
    {op, left_result, right_result}
  end
end

Summary

Callbacks

Visits an AST node and returns the transformed result.

Functions

Utility function to accept a visitor and process an AST.

Callbacks

visit(ast_node, opts)

@callback visit(
  ast_node :: Predicator.Parser.ast() | Predicator.Parser.bare_ast(),
  opts :: keyword()
) ::
  term()

Visits an AST node and returns the transformed result.

Parameters

  • ast_node - The AST node to visit
  • opts - Optional visitor-specific options

Returns

The transformed representation (type depends on visitor implementation)

Source positions

Implementations accept either a positioned AST or the position-free shape Predicator 3.6 produced, normalizing with Predicator.Parser.ensure_positions/1 on the way in.

Functions

accept(ast_node, visitor_module, opts \\ [])

Utility function to accept a visitor and process an AST.

This provides a convenient interface for applying visitors to AST nodes.

Examples

iex> ast = {:literal, 42}
iex> Predicator.Visitor.accept(ast, MyVisitor)
42