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