Class: ABNF::Parser::Compiler::Element

Inherits:
RuleBuilder show all
Defined in:
lib/abnf/parser/compiler/element.rb

Instance Attribute Summary collapse

Attributes inherited from RuleBuilder

#compiler

Instance Method Summary collapse

Methods inherited from RuleBuilder

#call, #initialize, #start_rule

Constructor Details

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

Instance Attribute Details

#ruleObject

Returns the value of attribute rule.



5
6
7
# File 'lib/abnf/parser/compiler/element.rb', line 5

def rule
  @rule
end

Instance Method Details

#bin_val_range(token) ⇒ Object



7
8
9
# File 'lib/abnf/parser/compiler/element.rb', line 7

def bin_val_range token
  num_val_range token, 2
end

#bin_val_sequence(token) ⇒ Object



11
12
13
# File 'lib/abnf/parser/compiler/element.rb', line 11

def bin_val_sequence token
  num_val_sequence token, 2
end

#char_val(token) ⇒ Object



15
16
17
18
19
# File 'lib/abnf/parser/compiler/element.rb', line 15

def char_val token
  string = token.lexeme[1...-1]
  rule = Rules::Terminal.string string, token.abnf
  compiler.pop rule
end

#dec_val_range(token) ⇒ Object



21
22
23
# File 'lib/abnf/parser/compiler/element.rb', line 21

def dec_val_range token
  num_val_range token, 10
end

#dec_val_sequence(token) ⇒ Object



25
26
27
# File 'lib/abnf/parser/compiler/element.rb', line 25

def dec_val_sequence token
  num_val_sequence token, 10
end

#group_start(_) ⇒ Object



29
30
31
32
33
# File 'lib/abnf/parser/compiler/element.rb', line 29

def group_start _
  compiler.push Group do |rule|
    compiler.pop rule
  end
end

#hex_val_range(token) ⇒ Object



35
36
37
# File 'lib/abnf/parser/compiler/element.rb', line 35

def hex_val_range token
  num_val_range token, 16
end

#hex_val_sequence(token) ⇒ Object



39
40
41
# File 'lib/abnf/parser/compiler/element.rb', line 39

def hex_val_sequence token
  num_val_sequence token, 16
end

#num_val_range(token, base) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
# File 'lib/abnf/parser/compiler/element.rb', line 43

def num_val_range token, base
  first, last = token.lexeme[2..-1].split '-'

  first = first.to_i base
  last = last.to_i base

  range = (first.chr..last.chr)

  rule = Rules::Terminal.character_range range, token.abnf
  compiler.pop rule
end

#num_val_sequence(token, base) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
# File 'lib/abnf/parser/compiler/element.rb', line 55

def num_val_sequence token, base
  codes = token.lexeme[2..-1].split '.'

  codes.map! do |code|
    code.to_i base
  end

  string = codes.pack 'C*'
  rule = Rules::Terminal.string string, token.abnf
  compiler.pop rule
end

#option_start(_) ⇒ Object



67
68
69
70
71
72
73
# File 'lib/abnf/parser/compiler/element.rb', line 67

def option_start _
  compiler.push Option do |rule|
    abnf = "[#{rule.abnf}]"
    rule = Rules::Repetition.new rule, (0..1), abnf
    compiler.pop rule
  end
end

#prose_val(token) ⇒ Object



75
76
77
78
# File 'lib/abnf/parser/compiler/element.rb', line 75

def prose_val token
  rule = Rules::ProseVal.new token.abnf
  compiler.pop rule
end

#rulename(token) ⇒ Object



80
81
82
83
# File 'lib/abnf/parser/compiler/element.rb', line 80

def rulename token
  rule = Rules::Reference.new token.lexeme
  compiler.pop rule
end