static public void main(String[] argv) throws Exception {
        if (argv.length==0 || !parseCommandLine(argv)) {
            System.out.println(helpMessage);
            System.out.println("version: "+version);
            System.exit(-1);
            return;
        }
        
        /* Load input wrapper (if any) */
        Wrapper wrapper = null;
        try {
            wrapper = getWrapper();
        }
        catch(SAXException wexcp) {
            log.severe("Cannot decode input wrapper: "+wexcp.getMessage());
            return;
        }
        
        /* Load input samples */
        Sample[] samples = null;
        try {
            samples = getSamples();
        }
        catch (SAXException sexcp) {
            log.severe("Cannot load all input samples: "+sexcp.getMessage());
            return;
        }
        
        /* Lexical properties might have been set by input wrapper */
        log.config("== roadRunner version: "+version+" ===");
        log.config("\n"+Config.getPrefs().toString());
        log.config("======================================");
        
        WrappersRepository repository = Engine.infer(wrapper,samples);
        if (!repository.isEmpty()) {
            log.info("Inference successful.");
            repository.setWrappersNamesIds(getWrapperName()); // set wrappers unique ids
            
            // label attributes
            Labeller labeller = new Labeller(repository);
            
            // save wrappers; wrap data; and make result browser-friendly
            BrowserMarshall marshall = new BrowserMarshall(repository, Shell.getWrapperName());
            marshall.marshall();
            
            // print sketch of results on console
            printResultOnConsole(repository);
            return;
        }
        else log.info("Sorry: none wrapper inferred.");
        System.out.println("-----------End--------------");
    }