class Peggy::AST

The root node of an Abstract Syntax Tree. Every node in the tree maps to a production found in the parse.

Attributes

_options[R]

Public Class Methods

new(source, results, options={}) click to toggle source
Calls superclass method Peggy::Node::new
# File lib/parse/ast.rb, line 163
def initialize source, results, options={}
  super nil
  @results = results
  @_options = options
  @ignore = Array(options[:ignore]) # XXX: turn to set
  self._source = source
  build_left nil, 0, self
end

Public Instance Methods

to_s() click to toggle source
# File lib/parse/ast.rb, line 172
def to_s
  _format
end

Private Instance Methods

build_children(parent, index) click to toggle source
# File lib/parse/ast.rb, line 203
def build_children parent, index
  while index < parent._range.last
    i2 = build_left parent, index
    break if i2 <= index
    index = i2
  end
end
build_left(parent, index, node=nil) click to toggle source
# File lib/parse/ast.rb, line 178
    def build_left parent, index, node=nil
      result = parent ? parent._range.last : index
      row = @results[index]
      return result unless row
      order = row[:found_order]
      return result unless order
      order.reverse_each do |name|
        continue if @ignore.include? name
        to = row[name]
        if node
          node._name = name
        else
          node = Node.new name
        end
        node._range = index...to
        node._source = _source
#puts "Built #{node.to_s}"
        parent << node if parent
        build_children parent, to if parent && to > index && to < parent._range.last
        parent = node
        node = nil
      end
      result
    end