Class: Neg::Parser

Inherits:
Object
  • Object
show all
Defined in:
lib/neg/parser.rb

Defined Under Namespace

Classes: AlternativeParser, CharacterParser, CompositeParser, NonTerminalParser, RepetitionParser, SequenceParser, StringParser, SubParser

Class Method Summary collapse

Class Method Details

._(c = nil) ⇒ Object



66
67
68
69
# File 'lib/neg/parser.rb', line 66

def self._(c=nil)

  CharacterParser.new(c)
end

.`(s) ⇒ Object



61
62
63
64
# File 'lib/neg/parser.rb', line 61

def self.`(s)

  StringParser.new(s)
end

.method_missing(m, *args) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/neg/parser.rb', line 35

def self.method_missing(m, *args)

  return super if args.any?
  return super if m.to_s == 'to_ary'

  @root ||= m
  pa = NonTerminalParser.new(m)

  (class << self; self; end).send(:define_method, m) { pa }

  pa
end

.parse(s) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/neg/parser.rb', line 48

def self.parse(s)

  i = Neg::Input(s)

  result = send(@root).parse(i)

  raise UnconsumedInputError.new(
    "remaining: #{i.remains.inspect}"
  ) if result[1] && ( ! i.eoi?)

  result
end

.to_sObject



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/neg/parser.rb', line 71

def self.to_s

  s = [ "#{name}:" ]

  methods.sort.each do |mname|

    m = method(mname)

    next if m.owner == Class
    next if %w[ _ to_s ].include?(mname.to_s)
    next unless m.arity == (RUBY_VERSION > '1.9' ? 0 : -1)
    next unless m.owner.ancestors.include?(Class)
    next unless m.receiver.ancestors.include?(Neg::Parser)

    s << "  #{send(mname).to_s}"
  end

  s << "  root: #{@root}"

  s.join("\n")
end