Sha256: 8c69b91febd05c54c63d5b5997120ec202a35c182ba9b8009e6c2a74f6f8500f

Contents?: true

Size: 1.03 KB

Versions: 1

Compression:

Stored size: 1.03 KB

Contents

module Treetop
  class Sequence < NodeInstantiatingParsingExpression
    attr_reader :elements, :node_class
    
    def initialize(elements)
      super()
      @elements = elements
    end
    
    def node_superclass
      SequenceSyntaxNode
    end
        
    def to_s
      parenthesize((@elements.collect {|elt| elt.to_s}).join(" "))
    end

    def parse_at(input, start_index, parser)
      results = []
      next_index = start_index
      
      for elt in elements
        result = elt.parse_at(input, next_index, parser)
        results << result
        return failure_at(start_index, results) if result.failure?
        next_index = result.interval.end
      end
      
      success(input, start_index...next_index, results, results)
    end
    
    protected

    def success(input, interval, results, encountered_child_results)
      return node_class.new(input,
                            interval,
                            results,
                            collect_nested_failures(encountered_child_results))
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
treetop-0.1.0 lib/treetop/grammar/parsing_expressions/sequence.rb