class Racc::GrammarFileParser

def _add_rule_block(target, enum)

def _add_rule_block(target, enum)
  rules = [] # [ [seqs, sprec], .. ]
  curr = []
  sprec = nil
  while (sym, idx = enum.next rescue nil)
    case sym
    when OrMark
      rules << [curr, sprec]
      curr = []
      sprec = nil
    when OptionMark
      curr << _add_option_rule(curr.pop)
    when ManyMark
      curr << _add_many_rule(curr.pop)
    when Many1Mark
      curr << _add_many1_rule(curr.pop)
    when GroupStartMark
      curr << _add_group_rule(enum)
    when GroupEndMark
      rules << [curr, sprec]
      return rules, sym, idx
    when Prec
      raise CompileError, "'=<prec>' used twice in one rule" if sprec
      sprec = sym.symbol
    else
      curr.push sym
    end
  end
  rules << [curr, sprec]
  rules.each do |syms, sprec|
    add_rule target, syms, sprec
  end
  nil
end