Class: ABNF::Parser::Compiler::Element
Instance Attribute Summary collapse
Attributes inherited from RuleBuilder
#compiler
Instance Method Summary
collapse
Methods inherited from RuleBuilder
#call, #initialize, #start_rule
Instance Attribute Details
#rule ⇒ Object
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
|