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