def apply(match_method_name)
      start_pos = @scanner.pos
      if m = memo_lr(match_method_name, start_pos)
        recall m, match_method_name
      else
        lr = LR.new(false, match_method_name, nil)
        @lr_stack.push lr
        m = inject_memo match_method_name, start_pos, lr, start_pos
        result = eval_rule match_method_name
        @lr_stack.pop
        if lr.head
          m.end_pos = @scanner.pos
          lr.seed = result
          lr_answer match_method_name, start_pos, m
        else
          save m, result
        end
      end
    end
def apply(match_method_name)
      start_pos = @scanner.pos
      if m = memo_lr(match_method_name, start_pos)
        recall m, match_method_name
      else
        lr = LR.new(false, match_method_name, nil)
        @lr_stack.push lr
        m = inject_memo match_method_name, start_pos, lr, start_pos
        result = eval_rule match_method_name
        @lr_stack.pop
        if lr.head
          m.end_pos = @scanner.pos
          lr.seed = result
          lr_answer match_method_name, start_pos, m
        else
          save m, result
        end
      end
    end
Create a new extended packrat parser to parse +source+.

 @param (see PackratParser#initialize)
 @option (see PackratParser#initialize)

 Apply a rule by dispatching to the given match method. The result of
 applying the rule is memoized so that the match method is invoked at most
 once at a given parse position. Left-recursion is detected and parsed
 correctly.

 @param (see PackratParser#apply)
 @return (see PackratParser#apply)