Class: Rattler::Parsers::ListParser
- Inherits:
-
Parser
- Object
- Util::Node
- Parser
- Rattler::Parsers::ListParser
- Includes:
- Combining
- Defined in:
- lib/rattler/parsers/list_parser.rb
Overview
ListParser matches terms matched by a term parser in a list with separators matched by a separator parser.
Class Method Summary collapse
-
.[](term_parser, sep_parser) ⇒ Object
Create a new list parser that matches terms with
term_parserand separators withsep_parser. - .parsed(results, *_) ⇒ Object
Instance Method Summary collapse
-
#parse(scanner, rules, scope = {}) ⇒ Array, true
Parse terms matched by the term parser in a list with separators matched by the separator parser.
- #sep_parser ⇒ Object
- #term_parser ⇒ Object
- #variable_capture_count? ⇒ Boolean
Methods included from Combining
Methods inherited from Parser
#&, #capturing?, #labeled?, #one_or_more, #optional, #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
Class Method Details
.[](term_parser, sep_parser) ⇒ Object
Create a new list parser that matches terms with term_parser and separators with sep_parser
27 28 29 |
# File 'lib/rattler/parsers/list_parser.rb', line 27 def self.[](term_parser, sep_parser) self.new(term_parser, sep_parser.skip) end |
.parsed(results, *_) ⇒ Object
21 22 23 |
# File 'lib/rattler/parsers/list_parser.rb', line 21 def self.parsed(results, *_) #:nodoc: self[*results] end |
Instance Method Details
#parse(scanner, rules, scope = {}) ⇒ Array, true
Parse terms matched by the term parser in a list with separators matched by the separator parser. Return the terms in an array, or true if the term parser is not capturing?.
47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/rattler/parsers/list_parser.rb', line 47 def parse(scanner, rules, scope = {}) a = [] p = scanner.pos while result = term_parser.parse(scanner, rules, scope) p = scanner.pos a << result break unless sep_parser.parse(scanner, rules, scope) end scanner.pos = p (capturing? ? a : true) if enough? a end |
#sep_parser ⇒ Object
35 36 37 |
# File 'lib/rattler/parsers/list_parser.rb', line 35 def sep_parser children[1] end |
#term_parser ⇒ Object
31 32 33 |
# File 'lib/rattler/parsers/list_parser.rb', line 31 def term_parser children[0] end |
#variable_capture_count? ⇒ Boolean
59 60 61 |
# File 'lib/rattler/parsers/list_parser.rb', line 59 def variable_capture_count? true end |