Module: Peg::Combinators
Defined Under Namespace
Modules: Implementation
Instance Method Summary
collapse
-
#lookahead(*parsers, name: nil) ⇒ Object
-
#many(*parsers, max: nil, min: 0, name: nil) ⇒ Object
-
#map(parser, name: nil, &mapper) ⇒ Object
(also: #_map)
-
#map_result(parser, name: nil, &mapper) ⇒ Object
-
#maybe(parser, name: nil) ⇒ Object
-
#satisfy(parser, name: nil, &satisfier) ⇒ Object
-
#select(*parsers, name: nil) ⇒ Object
-
#sequence(*parsers, name: nil) ⇒ Object
#_debug, #_lookahead, #_many, #_map_result, #_satisfy, #_select, #_sequence
Instance Method Details
#lookahead(*parsers, name: nil) ⇒ Object
9
10
11
12
|
# File 'lib/peg.backup/combinators.rb', line 9
def lookahead(*parsers, name: nil)
parsers = make_parsers(*parsers)
_lookahead(parsers, name:)
end
|
#many(*parsers, max: nil, min: 0, name: nil) ⇒ Object
14
15
16
17
18
19
20
21
22
23
24
|
# File 'lib/peg.backup/combinators.rb', line 14
def many(*parsers, max: nil, min: 0, name: nil)
name ||= "many(#{parsers.map(&:name).join(", ")})"
case parsers
in []
raise ArgumentError, "missing parser"
in [parser]
_many(parser, max:, min:, name:)
in _
many(select(*parsers), max:, min:, name:)
end
end
|
#map(parser, name: nil, &mapper) ⇒ Object
Also known as:
_map
26
27
28
29
30
31
32
33
|
# File 'lib/peg.backup/combinators.rb', line 26
def map(parser, name: nil, &mapper)
raise ArgumentError, "missing mapper function" unless mapper
raise ArgumentError, "mapper function must have arity 1" unless mapper.arity == 1
name ||= "map(#{parser.name})"
Parser.new(name) do |input|
Parser.parse(parser, input).map(&mapper)
end
end
|
#map_result(parser, name: nil, &mapper) ⇒ Object
36
37
38
39
40
|
# File 'lib/peg.backup/combinators.rb', line 36
def map_result(parser, name: nil, &mapper)
raise ArgumentError, "missing mapper function" unless mapper
raise ArgumentError, "mapper function must have arity 1" unless mapper.arity == 1
_map_result(parser, name || "map_result(#{parser.name})", mapper)
end
|
#maybe(parser, name: nil) ⇒ Object
42
43
44
45
46
47
48
49
50
51
|
# File 'lib/peg.backup/combinators.rb', line 42
def maybe(parser, name: nil)
Parser.new(name || "maybe(#{parser.name})") do |input, name|
case Parser.parse(parser, input)
in {ok: false}
{ok: true, ast: nil, input:}
in success
success
end
end
end
|
#satisfy(parser, name: nil, &satisfier) ⇒ Object
53
54
55
56
57
|
# File 'lib/peg.backup/combinators.rb', line 53
def satisfy(parser, name: nil, &satisfier)
raise ArgumentError, "missing satisfier block" unless satisfier
parser = make_parser(parser)
_satisfy(parser, name, satisfier)
end
|
#select(*parsers, name: nil) ⇒ Object
59
60
61
62
63
64
65
66
67
68
|
# File 'lib/peg.backup/combinators.rb', line 59
def select(*parsers, name: nil)
case parsers
in []
raise ArgumentError, "missing parser in select"
in [parser]
raise ArgumentError, "one parser in a selection is a NOP, remove the select call"
in _
_select(*make_parsers(parsers), name)
end
end
|
#sequence(*parsers, name: nil) ⇒ Object
70
71
72
73
74
75
76
77
78
79
|
# File 'lib/peg.backup/combinators.rb', line 70
def sequence(*parsers, name: nil)
case parsers
in []
raise ArgumentError, "missing parser"
in [parser]
raise ArgumentError, "one parser in a sequence is a NOP, remove the sequence call"
in _
_sequence(make_parsers(parsers), name)
end
end
|