Class: Neg::Parser
- Inherits:
-
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_s ⇒ Object
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
|