public void inform(String key, String value, ParseTree ctx) {
        inform(key, key, value, ctx);
        inform(key + "=\"" + value + '"', key, value, ctx);

        Set<Integer> lengths = getRequiredPrefixLengths(key);
        if (lengths != null) {
            int valueLength = value.length();
            for (Integer prefixLength : lengths) {
                if (valueLength >= prefixLength) {
                    inform(key + "{\"" + firstCharactersForPrefixHash(value, prefixLength) + '"', key, value, ctx);
                }
            }
        }
    }
Parses and analyzes the useragent string provided in the MutableUserAgent instance.
NOTE: This method is internally synchronized because the way the analyzer works is not reentrant.
@param userAgent The MutableUserAgent instance that is to be parsed and that gets all results
@return An ImmutableUserAgent copy of the results that is suitable for further usage and caching.
analyzer/src/main/java/nl/basjes/parse/useragent/analyze/UserAgentStringMatchMaker.java