def deep_apply(parser, context)
      parser = apply(parser, context)
      apply(parser.map_children { |child|
        deep_apply(child, child_context(parser, context))
      }, context)
    end
def deep_apply(parser, context)
      parser = apply(parser, context)
      apply(parser.map_children { |child|
        deep_apply(child, child_context(parser, context))
      }, context)
    end
Apply the optimzations to +parser+'s children, then to +parser+, in
 +context+.

 @param [Rattler::Parsers::Parser] parser the parser to be optimized
 @param [Rattler::Compiler::Optimizer::OptimizationContext] context

 @return [Rattler::Parsers::Parser] the optimized parser