Module: Peg::Parsers::BaseParsers

Included in:
Peg::Parsers, Peg::Parsers
Defined in:
lib/peg.backup/parsers/base_parsers.rb

Instance Method Summary collapse

Instance Method Details

#char_class_parser(*char_classes, name: nil) ⇒ Object

Parses a character which is a member of any of the ‘char_classes`



9
10
11
12
13
14
15
16
# File 'lib/peg.backup/parsers/base_parsers.rb', line 9

def char_class_parser(*char_classes, name: nil)
  case char_classes
  in [char_class]
    _1_char_class_parser(char_class, name:)
  else
    _char_classes_parser(*char_classes, name:)
  end
end

#char_parser(set = nil, name: nil, negate: false) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/peg.backup/parsers/base_parsers.rb', line 18

def char_parser(set=nil, name: nil, negate: false)
  set = mk_set(set)
  name ||= "char_parser(#{set.inspect})"
  Parser.new(name) do |input|
    case input.content
    in []
      Result.nok(error: "unexpected end of input", input:, name:)
    in [h, *]
      if set.member?(h) && !negate || !set.member?(h) && negate
        Result.ok(ast: h, input: input.advance)
      else
        Result.nok(input:, error: "#{h} is not member of the required set #{set}", name:)
      end
    end
  end
end

#end_parser(name: nil) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
# File 'lib/peg.backup/parsers/base_parsers.rb', line 35

def end_parser(name: nil)
  name ||= "end_parser"
  Parser.new(name) do |input|
    case input.content
    in []
      Result.ok(ast: nil, input:)
    in _
      Result.nok(input: input, error: "not at end of input", name:)
    end
  end
end

#make_parser(parser) ⇒ Object



47
48
49
50
51
52
53
54
# File 'lib/peg.backup/parsers/base_parsers.rb', line 47

def make_parser(parser)
  case parser
  when String
    char_parser(parser)
  else
    parser
  end
end

#make_parsers(*parsers) ⇒ Object



56
57
58
59
60
# File 'lib/peg.backup/parsers/base_parsers.rb', line 56

def make_parsers(*parsers)
  parsers
    .flatten
    .map { make_parser it }
end