public override IEnumerable <OutputRecord> Execute(ParseEngine engine) { var current = Enclosure.Execute(engine); if (engine.IsFailure(current)) { return(current); } Func <IEnumerable <OutputRecord> > predicate = () => { var mark = engine.Mark(); var result = Enclosure.Execute(engine); engine.Reset(mark); return(result); }; engine.AddInterceptor(predicate); try { var operandResult = Operand.Execute(engine); if (engine.IsFailure(operandResult)) { return(operandResult); } current = current.Concat(operandResult); } finally { engine.RemoveInterceptor(predicate); } var closeResult = Enclosure.Execute(engine); if (engine.IsFailure(closeResult)) { return(closeResult); } return(current.Concat(closeResult)); }