Module: L43Peg::Combinators::Seq
- Extended by:
- Seq
- Includes:
- Helper
- Included in:
- Seq
- Defined in:
- lib/l43_peg/combinators/seq.rb
Instance Method Summary
collapse
Methods included from Helper
#fail_parser, #succeed_parser
Instance Method Details
#seq(input:, cache:, name:, parsers:) ⇒ Object
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
# File 'lib/l43_peg/combinators/seq.rb', line 9
def seq(input:, cache:, name:, parsers:)
curr_input = input
curr_cache = cache
ast = []
parsers.each do |parser|
case parser.(curr_input, cache: curr_cache)
in L43Peg::Failure => failure
return L43Peg::Failure.new(reason: "#{failure.reason} in (#{name})", position: failure.position, input:)
in L43Peg::Success => success
ast.push(success.ast)
curr_input = success.rest
curr_cache = success.cache
end
end
succeed_parser(ast, curr_input, cache: curr_cache)
end
|