class ABNF::Alt

Attributes

elts[R]

Public Class Methods

_new(*elts)
Alias for: new
new(*elts) click to toggle source
# File lib/abnf/grammar.rb, line 44
def Alt.new(*elts)
  elts2 = []
  elts.each {|e|
    if e.empty_set?
      next
    elsif Alt === e
      elts2.concat e.elts
    elsif Term === e
      if Term === elts2.last
        elts2[-1] = Term.new(elts2.last.natset + e.natset)
      else
        elts2 << e
      end
    else
      elts2 << e
    end
  }
  case elts2.length
  when 0; EmptySet
  when 1; elts2.first
  else; Alt._new(*elts2)
  end
end
Also aliased as: _new
new(*elts) click to toggle source
# File lib/abnf/grammar.rb, line 68
def initialize(*elts)
  @elts = elts
end

Public Instance Methods

each_var(&block) click to toggle source
# File lib/abnf/grammar.rb, line 77
def each_var(&block) @elts.each {|elt| elt.each_var(&block)} end
empty_set?() click to toggle source
# File lib/abnf/grammar.rb, line 73
def empty_set?
  @elts.empty?
end
recursion(syms, lhs) click to toggle source
# File lib/abnf/regexp.rb, line 180
def recursion(syms, lhs)
  @elts.inject(0) {|r, e| r | e.recursion(syms, lhs)}
end
regexp_tree() click to toggle source
# File lib/abnf/regexp.rb, line 390
def regexp_tree() RegexpTree.alt(*@elts.map {|e| e.regexp_tree}) end
remove_just_recursion(n) click to toggle source
# File lib/abnf/regexp.rb, line 184
def remove_just_recursion(n)
  Alt.new(*@elts.map {|e| e.remove_just_recursion(n)})
end
split_left_recursion(n) click to toggle source
# File lib/abnf/regexp.rb, line 188
def split_left_recursion(n)
  nonrec = EmptySet
  rest = EmptySet
  @elts.each {|e|
    nonrec1, rest1 = e.split_left_recursion(n)
    nonrec |= nonrec1
    rest |= rest1
  }
  [nonrec, rest]
end
split_recursion(n) click to toggle source
# File lib/abnf/regexp.rb, line 210
def split_recursion(n)
  rest_left = EmptySet
  nonrec = EmptySet
  rest_right = EmptySet
  @elts.each {|e|
    rest_left1, nonrec1, rest_right1 = e.split_recursion(n)
    rest_left |= rest_left1
    nonrec |= nonrec1
    rest_right |= rest_right1
  }
  [rest_left, nonrec, rest_right]
end
split_right_recursion(n) click to toggle source
# File lib/abnf/regexp.rb, line 199
def split_right_recursion(n)
  nonrec = EmptySet
  rest = EmptySet
  @elts.each {|e|
    nonrec1, rest1 = e.split_right_recursion(n)
    nonrec |= nonrec1
    rest |= rest1
  }
  [nonrec, rest]
end
subst_var(&block) click to toggle source
# File lib/abnf/grammar.rb, line 78
def subst_var(&block) Alt.new(*@elts.map {|elt| elt.subst_var(&block)}) end
useful?(useful_names) click to toggle source
# File lib/abnf/abnf.rb, line 120
def useful?(useful_names) @elts.any? {|e| e.useful?(useful_names)} end