Class: ABNF::Parser::Compiler::Repetition

Inherits:
RuleBuilder
  • Object
show all
Defined in:
lib/abnf/parser/compiler/repetition.rb

Instance Attribute Summary collapse

Attributes inherited from RuleBuilder

#compiler

Instance Method Summary collapse

Methods inherited from RuleBuilder

#call, #initialize

Constructor Details

This class inherits a constructor from ABNF::Parser::Compiler::RuleBuilder

Instance Attribute Details

#abnfObject



9
10
11
# File 'lib/abnf/parser/compiler/repetition.rb', line 9

def abnf
  @abnf ||= ''
end

#elementObject

Returns the value of attribute element.



6
7
8
# File 'lib/abnf/parser/compiler/repetition.rb', line 6

def element
  @element
end

#rangeObject

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