private static String[] separateIntoTokens(String step) {
            // Basically, each token is a chain of characters delimited by a ' ' character
            // However, we treat anything between double quotes (") as a single token
            // That is because anything between double quotes will be a parameter and
            // thus need to be processed accordingly
            StringBuilder builder = new StringBuilder();
            List<String> tokens = new ArrayList<String>();
            char[] characters = step.toCharArray();
            boolean isParsingString = false;

            for (char c : characters) {
                switch (c) {
                    case '"':
                        builder.append(c);
                        // We have a very basic state automata
                        // That means no nested quotes ...
                        isParsingString = !isParsingString;
                        break;
                    case ' ':
                        // If we inside a double quote, we treat the ' ' character as any other one
                        if (isParsingString) {
                            builder.append(c);
                        }
                        // Else, it marks the limit between two tokens
                        else {
                            tokens.add(builder.toString());
                            builder = new StringBuilder();
                        }
                        break;
                    default:
                        builder.append(c);
                        break;
                }

            }

            // Do not forget to add the last parsed token, otherwise it
            // will not be added if the line does not end with a whitespace
            if (builder.length() > 0) {
                tokens.add(builder.toString());
            }

            return tokens.toArray(new String[0]);
        }