Class: TRuby::ParserCombinator::Parser
- Inherits:
-
Object
- Object
- TRuby::ParserCombinator::Parser
- Defined in:
- lib/t_ruby/parser_combinator.rb
Overview
Base parser class
Direct Known Subclasses
Alternative, ChainLeft, Choice, EndOfInput, Fail, FlatMap, Label, Lazy, Literal, Lookahead, Many, Many1, Map, NotFollowedBy, Optional, Pure, Regex, Satisfy, SepBy, SepBy1, Sequence, SkipRight
Instance Method Summary collapse
-
#<<(other) ⇒ Object
Skip right: parse both, keep left result.
-
#>>(other) ⇒ Object
Sequence: run this parser, then the other.
-
#between(left, right) ⇒ Object
Between: parse between left and right delimiters.
-
#flat_map(&block) ⇒ Object
FlatMap: transform with another parser.
-
#label(name) ⇒ Object
Label: add a descriptive label for error messages.
-
#lookahead ⇒ Object
Lookahead: check without consuming.
-
#many ⇒ Object
Many: zero or more repetitions.
-
#many1 ⇒ Object
Many1: one or more repetitions.
-
#map(&block) ⇒ Object
Map: transform the result.
-
#not_followed_by ⇒ Object
Not: succeed only if parser fails.
-
#optional ⇒ Object
Optional: zero or one.
- #parse(input, position = 0) ⇒ Object
-
#sep_by(delimiter) ⇒ Object
Separated by: parse items separated by delimiter.
-
#sep_by1(delimiter) ⇒ Object
Separated by 1: at least one item.
-
#|(other) ⇒ Object
Alternative: try this parser, if it fails try the other.
Instance Method Details
#<<(other) ⇒ Object
Skip right: parse both, keep left result
105 106 107 |
# File 'lib/t_ruby/parser_combinator.rb', line 105 def <<(other) SkipRight.new(self, other) end |
#>>(other) ⇒ Object
Sequence: run this parser, then the other
55 56 57 |
# File 'lib/t_ruby/parser_combinator.rb', line 55 def >>(other) Sequence.new(self, other) end |
#between(left, right) ⇒ Object
Between: parse between left and right delimiters
100 101 102 |
# File 'lib/t_ruby/parser_combinator.rb', line 100 def between(left, right) (left >> self << right).map { |(_, val)| val } end |
#flat_map(&block) ⇒ Object
FlatMap: transform with another parser
70 71 72 |
# File 'lib/t_ruby/parser_combinator.rb', line 70 def flat_map(&block) FlatMap.new(self, block) end |
#label(name) ⇒ Object
Label: add a descriptive label for error messages
110 111 112 |
# File 'lib/t_ruby/parser_combinator.rb', line 110 def label(name) Label.new(self, name) end |
#lookahead ⇒ Object
Lookahead: check without consuming
115 116 117 |
# File 'lib/t_ruby/parser_combinator.rb', line 115 def lookahead Lookahead.new(self) end |
#many ⇒ Object
Many: zero or more repetitions
75 76 77 |
# File 'lib/t_ruby/parser_combinator.rb', line 75 def many Many.new(self) end |
#many1 ⇒ Object
Many1: one or more repetitions
80 81 82 |
# File 'lib/t_ruby/parser_combinator.rb', line 80 def many1 Many1.new(self) end |
#map(&block) ⇒ Object
Map: transform the result
65 66 67 |
# File 'lib/t_ruby/parser_combinator.rb', line 65 def map(&block) Map.new(self, block) end |
#not_followed_by ⇒ Object
Not: succeed only if parser fails
120 121 122 |
# File 'lib/t_ruby/parser_combinator.rb', line 120 def not_followed_by NotFollowedBy.new(self) end |
#optional ⇒ Object
Optional: zero or one
85 86 87 |
# File 'lib/t_ruby/parser_combinator.rb', line 85 def optional Optional.new(self) end |
#parse(input, position = 0) ⇒ Object
48 49 50 |
# File 'lib/t_ruby/parser_combinator.rb', line 48 def parse(input, position = 0) raise NotImplementedError end |
#sep_by(delimiter) ⇒ Object
Separated by: parse items separated by delimiter
90 91 92 |
# File 'lib/t_ruby/parser_combinator.rb', line 90 def sep_by(delimiter) SepBy.new(self, delimiter) end |
#sep_by1(delimiter) ⇒ Object
Separated by 1: at least one item
95 96 97 |
# File 'lib/t_ruby/parser_combinator.rb', line 95 def sep_by1(delimiter) SepBy1.new(self, delimiter) end |
#|(other) ⇒ Object
Alternative: try this parser, if it fails try the other
60 61 62 |
# File 'lib/t_ruby/parser_combinator.rb', line 60 def |(other) Alternative.new(self, other) end |