final public andOperator_AST AndExpression() throws ParseException {
  equality_AST equalityExpr =null;
  andOperator_AST andExpr = null;
    andOperator_AST jjtn001 = new andOperator_AST(JJTANDOPERATOR_AST);
    boolean jjtc001 = true;
    jjtree.openNodeScope(jjtn001);
    try {
      equalityExpr = EqualityExpression();
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case AND:
        jj_consume_token(AND);
        andExpr = AndExpression();
        break;
      default:
        jj_la1[47] = jj_gen;
        ;
      }
    jjtree.closeNodeScope(jjtn001, true);
    jjtc001 = false;
    jjtn001.lhs = equalityExpr;
    jjtn001.rhs = andExpr;
    {if (true) return jjtn001;}
    } catch (Throwable jjte001) {
    if (jjtc001) {
      jjtree.clearNodeScope(jjtn001);
      jjtc001 = false;
    } else {
      jjtree.popNode();
    }
    if (jjte001 instanceof RuntimeException) {
      {if (true) throw (RuntimeException)jjte001;}
    }
    if (jjte001 instanceof ParseException) {
      {if (true) throw (ParseException)jjte001;}
    }
    {if (true) throw (Error)jjte001;}
    } finally {
    if (jjtc001) {
      jjtree.closeNodeScope(jjtn001, true);
    }
    }
    throw new Error("Missing return statement in function");
  }