Module: L43Peg::Combinators
Defined Under Namespace
Modules: DebugParser, Many, Sel, Seq
Instance Method Summary
collapse
-
#args_parser(definitions, name: nil, stop: nil, &block) ⇒ Object
-
#debug_parser(parser, name: nil, level: :default) ⇒ Object
-
#many(parser, name: nil, min: 0, max: nil) ⇒ Object
-
#map(parser, name: nil, fn: nil, &mapper) ⇒ Object
-
#rgx_tokenize(rgx_specs, name: nil) ⇒ Object
-
#sel(parsers, name: nil) ⇒ Object
-
#sel_rgx_parser(rgx_specs, name: nil) ⇒ Object
-
#seq(*parsers, name: nil) ⇒ Object
Methods included from Parsers
#char_parser, #end_parser, #failure_parser, #int_parser, #rgx_parser, #token_parser, #tokens_parser, #verb_parser
Methods included from Mappers
#join_and_to_i, #join_maps
Methods included from Helper
#fail_parser, #succeed_parser
Instance Method Details
#args_parser(definitions, name: nil, stop: nil, &block) ⇒ Object
18
19
20
21
22
23
|
# File 'lib/l43_peg/combinators.rb', line 18
def args_parser(definitions, name: nil, stop: nil, &block)
parser = tokens_parser(definitions, stop:, &block)
name = name || "args_parser(#{definitions.inspect})"
inner = many(parser)
map(inner, name:, fn: join_maps)
end
|
#debug_parser(parser, name: nil, level: :default) ⇒ Object
25
26
27
28
|
# File 'lib/l43_peg/combinators.rb', line 25
def debug_parser(parser, name: nil, level: :default)
name ||= "debug_parser(#{parser.name})"
Parser.new(name, &DebugParser.parse_with_debug(parser:, level:, name:))
end
|
#many(parser, name: nil, min: 0, max: nil) ⇒ Object
30
31
32
|
# File 'lib/l43_peg/combinators.rb', line 30
def many(parser, name: nil, min: 0, max: nil)
Parser.new(name || "many(#{parser.name})") {|input, cache, name1=nil| Many.many(input:, cache:, name: name1 || name, parser:, min:, max:)}
end
|
#map(parser, name: nil, fn: nil, &mapper) ⇒ Object
34
35
36
37
38
39
|
# File 'lib/l43_peg/combinators.rb', line 34
def map(parser, name: nil, fn: nil, &mapper)
raise ArgumentError, "must not provide keyword parameyer fn and a block" if fn && mapper
mapper = fn || mapper
raise ArgumentError, "must provide keyword parameyer fn or a block" unless mapper
Parser.new(name || "map(#{parser.name})") {|input, cache, name=nil| _map(input:, cache:, name:, parser:, mapper:)}
end
|
#rgx_tokenize(rgx_specs, name: nil) ⇒ Object
41
42
43
44
|
# File 'lib/l43_peg/combinators.rb', line 41
def rgx_tokenize(rgx_specs, name: nil)
name = name || "rgx_tokenize(#{rgx_specs.inspect})"
many(sel_rgx_parser(rgx_specs, name:))
end
|
#sel(parsers, name: nil) ⇒ Object
46
47
48
49
|
# File 'lib/l43_peg/combinators.rb', line 46
def sel(parsers, name: nil)
name ||= "sel(#{parsers.map(&:name).join(", ")})"
Parser.new(name) { |input, cache, name1=nil| Sel.sel(input:, cache:, name: name1 || name, parsers:) }
end
|
#sel_rgx_parser(rgx_specs, name: nil) ⇒ Object
51
52
53
54
55
|
# File 'lib/l43_peg/combinators.rb', line 51
def sel_rgx_parser(rgx_specs, name: nil)
name = name || "sel_rgx_parser(#{rgx_specs.inspect})"
parsers = rgx_specs.map(&_mk_rgx_parser)
sel(parsers, name:)
end
|
#seq(*parsers, name: nil) ⇒ Object
57
58
59
60
|
# File 'lib/l43_peg/combinators.rb', line 57
def seq(*parsers, name: nil)
name ||= "seq(#{parsers.map(&:name).join(", ")})"
Parser.new(name) {|input, cache, _name=nil| Seq.seq(input:, cache:, name:, parsers:)}
end
|