Class: ABNF::Parser::Compiler::Repetition
Instance Attribute Summary collapse
Attributes inherited from RuleBuilder
#compiler
Instance Method Summary
collapse
Methods inherited from RuleBuilder
#call, #initialize
Instance Attribute Details
#abnf ⇒ Object
9
10
11
|
# File 'lib/abnf/parser/compiler/repetition.rb', line 9
def abnf
@abnf ||= ''
end
|
#element ⇒ Object
Returns the value of attribute element.
6
7
8
|
# File 'lib/abnf/parser/compiler/repetition.rb', line 6
def element
@element
end
|
#range ⇒ Object
Returns the value of attribute range.
7
8
9
|
# File 'lib/abnf/parser/compiler/repetition.rb', line 7
def range
@range
end
|
Instance Method Details
#finished(element) ⇒ Object
13
14
15
16
17
18
19
20
21
22
23
|
# File 'lib/abnf/parser/compiler/repetition.rb', line 13
def finished element
abnf << element.abnf
if range
rule = Rules::Repetition.new element, range, abnf
else
rule = element
end
compiler.pop rule
end
|
#repeat_exact(token) ⇒ Object
25
26
27
28
29
30
|
# File 'lib/abnf/parser/compiler/repetition.rb', line 25
def repeat_exact token
number = token.lexeme.to_i
self.abnf = token.abnf
self.range = (number..number)
end
|
#repeat_range(token) ⇒ Object
32
33
34
35
36
37
38
39
40
|
# File 'lib/abnf/parser/compiler/repetition.rb', line 32
def repeat_range token
minimum, maximum = token.lexeme.split '*'
if minimum then minimum = minimum.to_i else minimum = 0 end
if maximum then maximum = maximum.to_i else maximum = Float::INFINITY end
self.abnf = token.abnf
self.range = (minimum..maximum)
end
|
#start_rule(token) ⇒ Object
42
43
44
45
46
|
# File 'lib/abnf/parser/compiler/repetition.rb', line 42
def start_rule token
compiler.push Element do |element|
finished element
end
end
|