class Parslet::Atoms::Alternative

Alternative during matching. Contains a list of parslets that is tried each one in turn. Only fails if all alternatives fail.

Example:

str('a') | str('b')   # matches either 'a' or 'b'

Attributes

alternatives[R]

Public Class Methods

new(*alternatives) click to toggle source

Constructs an Alternative instance using all given parslets in the order given. This is what happens if you call '|' on existing parslets, like this:

str('a') | str('b')
Calls superclass method
# File lib/parslet/atoms/alternative.rb, line 18
def initialize(*alternatives)
  super()
  
  @alternatives = alternatives
end

Public Instance Methods

accept(visitor) click to toggle source

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

# File lib/parslet/atoms/visitor.rb, line 60
def accept(visitor)
  visitor.visit_alternative(alternatives)
end
error_msg() click to toggle source
# File lib/parslet/atoms/alternative.rb, line 32
def error_msg
  @error_msg ||= "Expected one of #{alternatives.inspect}"
end
to_s_inner(prec) click to toggle source
# File lib/parslet/atoms/alternative.rb, line 50
def to_s_inner(prec)
  alternatives.map { |a| a.to_s(prec) }.join(' / ')
end
try(source, context, consume_all) click to toggle source
# File lib/parslet/atoms/alternative.rb, line 36
def try(source, context, consume_all)
  errors = alternatives.map { |a|
    success, value = result = a.apply(source, context, consume_all)
    return result if success
    
    # Aggregate all errors
    value
  }
  
  # If we reach this point, all alternatives have failed.
  context.err(self, source, error_msg, errors)
end
|(parslet) click to toggle source

+

# File lib/parslet/atoms/alternative.rb, line 28
def |(parslet)
  self.class.new(*@alternatives + [parslet])
end