/**
   * Returns the {@link JPQLGrammar} that will help to validate the JPQL query grammatically and
   * semantically (contextually). It will also checks if any specific feature added to that grammar
   * is allowed. For instance, if the JPQL query has functions defined for EclipseLink grammar but
   * the validation level is set for generic JPA, then an exception will be thrown.
   *
   * @return The {@link JPQLGrammar} written for a specific JPA version or for the current version
   *     of EclipseLink
   */
  private JPQLGrammar jpqlGrammar() {

    if (validationLevel == ParserValidationType.EclipseLink) {
      return DefaultEclipseLinkJPQLGrammar.instance();
    }

    if (validationLevel == ParserValidationType.JPA10) {
      return JPQLGrammar1_0.instance();
    }

    if (validationLevel == ParserValidationType.JPA20) {
      return JPQLGrammar2_0.instance();
    }

    if (validationLevel == ParserValidationType.JPA21) {
      return JPQLGrammar2_1.instance();
    }

    return DefaultEclipseLinkJPQLGrammar.instance();
  }
 /** {@inheritDoc} */
 public JPQLGrammar getGrammar() {
   return JPQLGrammar2_0.instance();
 }