module ABNF::Parser::Controls::RuleLists

Public Instance Methods

deep_reference() click to toggle source
# 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
example() click to toggle source
# 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
recursive() click to toggle source
# File lib/abnf/parser/controls/rule_lists.rb, line 37
                      def recursive
MultiplesOfThree.rule_list
                      end
reference(referenced_rule=nil) click to toggle source
# 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