module Raabro::ModuleMethods

def alt(name, input, *parsers)

def alt(name, input, *parsers)
  greedy =
    if parsers.last == true || parsers.last == false
      parsers.pop
    else
      false
    end
  r = ::Raabro::Tree.new(name, greedy ? :altg : :alt, input)
  start = input.offset
  c = nil
  parsers.each do |pa|
    cc = _parse(pa, input)
    r.children << cc
    input.offset = start
    if greedy
      if cc.result == 1 && cc.length >= (c ? c.length : -1)
        c.result = 0 if c
        c = cc
      else
        cc.result = 0
      end
    else
      c = cc
      break if c.result == 1
    end
  end
  if c && c.result == 1
    r.result = 1
    r.length = c.length
    input.offset = start + r.length
  end
  r.prune! if input.options[:prune]
  r
end