Class: Token::Resolver::Transform

Inherits:
Object
  • Object
show all
Defined in:
lib/token/resolver/transform.rb

Overview

Transforms the raw parslet parse tree into Node::Text and Node::Token objects.

The grammar produces one :text entry per character and :token entries
with :seg captures. This transform converts those into proper node objects
and coalesces adjacent Text nodes into single nodes.

Examples:

config = Config.default
tree = Grammar.build(config).new.parse("Hi {KJ|X}!")
nodes = Transform.apply(tree, config)
# => [Node::Text("Hi "), Node::Token(["KJ", "X"]), Node::Text("!")]

Class Method Summary collapse

Class Method Details

.apply(tree, config) ⇒ Array<Node::Text, Node::Token>

Transform a parslet tree into an array of Text and Token nodes.

Parameters:

  • tree (Array<Hash>)

    Raw parslet parse tree

  • config (Config)

    Token configuration

Returns:



26
27
28
29
30
31
32
33
34
# File 'lib/token/resolver/transform.rb', line 26

def apply(tree, config)
  return [] if tree.nil? || (tree.respond_to?(:empty?) && tree.empty?)

  # Convert raw parslet entries to node objects
  raw_nodes = tree.map { |entry| convert_entry(entry, config) }

  # Coalesce adjacent Text nodes
  coalesce(raw_nodes)
end