Class: Rattler::Parsers::OneOrMore

Inherits:
Parser show all
Includes:
Combining
Defined in:
lib/rattler/parsers/one_or_more.rb

Overview

OneOrMore decorates a parser to match repeatedly and succeed if the decorated parser succeeds at least once.

Author:

  • Jason Arhart

Instance Method Summary collapse

Methods included from Combining

#capturing?, #with_ws

Methods inherited from Parser

#&, #capturing?, #labeled?, #one_or_more, #optional, parsed, #skip, #with_ws, #zero_or_more, #|

Methods inherited from Util::Node

#==, [], #[], #attrs, #can_equal?, #child, #children, #each, #empty?, #eql?, #initialize, #inspect, #method_missing, #name, #respond_to?, #same_contents?, #to_graphviz, #with_attrs, #with_attrs!, #with_children

Constructor Details

This class inherits a constructor from Rattler::Util::Node

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class Rattler::Util::Node

Instance Method Details

#parse(scanner, rules, scope = {}) ⇒ Array, Boolean

Parse using the decorated parser as many times as it succeeds. If it does not succeeds at least once return false, otherwise the results in an array, or true if the decorated parser is not capturing?.

Returns:

  • (Array, Boolean)

    an array containing the decorated parser’s parse results, or true if the decorated parser is not capturing?, or false if the decorated parser does not succeed at least once.



34
35
36
37
38
39
40
# File 'lib/rattler/parsers/one_or_more.rb', line 34

def parse(scanner, rules, scope = {})
  a = []
  while result = child.parse(scanner, rules, scope)
    a << result
  end
  (capturing? ? a : true) unless a.empty?
end

#variable_capture_count?Boolean

Returns:

  • (Boolean)


42
43
44
# File 'lib/rattler/parsers/one_or_more.rb', line 42

def variable_capture_count?
  true
end