class Parslet::Atoms::Sequence

A sequence of parslets, matched from left to right. Denoted by '>>'

Example:

str('a') >> str('b')  # matches 'a', then 'b'

Attributes

parslets[R]

Public Class Methods

new(*parslets) click to toggle source
Calls superclass method
# File lib/parslet/atoms/sequence.rb, line 9
def initialize(*parslets)
  super()

  @parslets = parslets
  @error_msgs = {
    :failed  => "Failed to match sequence (#{self.inspect})"
  }
end

Public Instance Methods

>>(parslet) click to toggle source
# File lib/parslet/atoms/sequence.rb, line 18
def >>(parslet)
  self.class.new(* @parslets+[parslet])
end
accept(visitor) click to toggle source

Call back visitors visit_sequence method. See parslet/export for an example.

# File lib/parslet/atoms/visitor.rb, line 42
def accept(visitor)
  visitor.visit_sequence(parslets)
end
to_s_inner(prec) click to toggle source
# File lib/parslet/atoms/sequence.rb, line 42
def to_s_inner(prec)
  parslets.map { |p| p.to_s(prec) }.join(' ')
end
try(source, context, consume_all) click to toggle source
# File lib/parslet/atoms/sequence.rb, line 22
def try(source, context, consume_all)
  # Presize an array
  result = Array.new(parslets.size + 1)
  result[0] = :sequence
  
  parslets.each_with_index do |p, idx|
    child_consume_all = consume_all && (idx == parslets.size-1)
    success, value = p.apply(source, context, child_consume_all) 

    unless success
      return context.err(self, source, @error_msgs[:failed], [value]) 
    end

    result[idx+1] = value
  end
  
  return succ(result)
end