class ABNF::Alt
Attributes
elts[R]
Public Class Methods
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