code: public QueryCommand parse( TypeSystem typeSystem,
                                 String language,
                                 String query ) {
          CheckArg.isNotNull(language, "language");
          CheckArg.isNotNull(typeSystem, "typeSystem");
          CheckArg.isNotNull(query, "query");
          QueryParser parser = parsers.get(language.trim().toLowerCase());
          if (parser == null) {
              throw new IllegalArgumentException(GraphI18n.unknownQueryLanguage.text(language));
          }
          return parser.parseQuery(query, typeSystem);
      }
docs: Execute the supplied query by planning, optimizing, and then processing it.
  
  @param typeSystem the type system that should be used
  @param language the language in which the query is expressed; must case-insensitively match one of the supported
  {@link #getLanguages() languages}
  @param query the query that is to be executed
  @return the parsed query command; never null
  @throws IllegalArgumentException if the language, context or query references are null, or if the language is not known
  @throws ParsingException if there is an error parsing the supplied query
  @throws InvalidQueryException if the supplied query can be parsed but is invalid