Module: ABNF::Parser::Controls::RuleLists

Extended by:
RuleLists
Included in:
RuleLists
Defined in:
lib/abnf/parser/controls/rule_lists.rb,
lib/abnf/parser/controls/rule_lists/multiples_of_three.rb

Defined Under Namespace

Modules: MultiplesOfThree

Instance Method Summary collapse

Instance Method Details

#deep_referenceObject



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/abnf/parser/controls/rule_lists.rb', line 7

def deep_reference
  rule_list = reference Rules.regexp_pattern
  referenced_rule = rule_list['references-some-rule']

  alternation = Parser::Rules::Alternation.new(
    [
      referenced_rule,
      Rules.concatenation,
    ],
    "( #{referenced_rule.abnf} / #{ABNF.concatenation} )",
  )

  repetition = Parser::Rules::Repetition.new(
    alternation,
    (1...Float::INFINITY),
    "1*#{alternation.abnf}",
  )

  rule_list.update 'deep-reference' => repetition
  rule_list
end

#exampleObject



29
30
31
32
33
34
35
# File 'lib/abnf/parser/controls/rule_lists.rb', line 29

def example
  rule = Rules.example

  rule_list = RuleList.new
  rule_list.update 'some-rule' => rule
  rule_list
end

#recursiveObject



37
38
39
# File 'lib/abnf/parser/controls/rule_lists.rb', line 37

def recursive
      MultiplesOfThree.rule_list
end

#reference(referenced_rule = nil) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/abnf/parser/controls/rule_lists.rb', line 41

def reference referenced_rule=nil
  referenced_rule ||= Rules.example

  rule = Parser::Rules::Concatenation.new(
    [
      Parser::Rules::Terminal.string('[', '"["'),
      Parser::Rules::Reference.new('some-rule'),
      Parser::Rules::Terminal.string(']', '"]"'),
    ],
    %{"[" #{referenced_rule.abnf} "]"},
  )

  rule_list = RuleList.new
  rule_list.update(
    'references-some-rule' => rule,
    'some-rule' => referenced_rule,
  )
  rule_list
end