src/main/java/ognl/OgnlParser.java
final public void relationalExpression() throws ParseException {
    shiftExpression();
    label_8:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case 19:
      case 20:
      case 21:
      case 22:
      case 23:
      case 24:
      case 25:
      case 26:
      case 27:
      case 28:
        ;
        break;
      default:
        jj_la1[17] = jj_gen;
        break label_8;
      }
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case 19:
      case 20:
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case 19:
          jj_consume_token(19);
          break;
        case 20:
          jj_consume_token(20);
          break;
        default:
          jj_la1[18] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
                       ASTLess jjtn001 = new ASTLess(JJTLESS);
                       boolean jjtc001 = true;
                       jjtree.openNodeScope(jjtn001);
        try {
          shiftExpression();
        } 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,  2);
                       }
        }
        break;
      case 21:
      case 22:
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case 21:
          jj_consume_token(21);
          break;
        case 22:
          jj_consume_token(22);
          break;
        default:
          jj_la1[19] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
                       ASTGreater jjtn002 = new ASTGreater(JJTGREATER);
                       boolean jjtc002 = true;
                       jjtree.openNodeScope(jjtn002);
        try {
          shiftExpression();
        } catch (Throwable jjte002) {
                       if (jjtc002) {
                         jjtree.clearNodeScope(jjtn002);
                         jjtc002 = false;
                       } else {
                         jjtree.popNode();
                       }
                       if (jjte002 instanceof RuntimeException) {
                         {if (true) throw (RuntimeException)jjte002;}
                       }
                       if (jjte002 instanceof ParseException) {
                         {if (true) throw (ParseException)jjte002;}
                       }
                       {if (true) throw (Error)jjte002;}
        } finally {
                       if (jjtc002) {
                         jjtree.closeNodeScope(jjtn002,  2);
                       }
        }
        break;
      case 23:
      case 24:
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case 23:
          jj_consume_token(23);
          break;
        case 24:
          jj_consume_token(24);
          break;
        default:
          jj_la1[20] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
                         ASTLessEq jjtn003 = new ASTLessEq(JJTLESSEQ);
                         boolean jjtc003 = true;
                         jjtree.openNodeScope(jjtn003);
        try {
          shiftExpression();
        } catch (Throwable jjte003) {
                         if (jjtc003) {
                           jjtree.clearNodeScope(jjtn003);
                           jjtc003 = false;
                         } else {
                           jjtree.popNode();
                         }
                         if (jjte003 instanceof RuntimeException) {
                           {if (true) throw (RuntimeException)jjte003;}
                         }
                         if (jjte003 instanceof ParseException) {
                           {if (true) throw (ParseException)jjte003;}
                         }
                         {if (true) throw (Error)jjte003;}
        } finally {
                         if (jjtc003) {
                           jjtree.closeNodeScope(jjtn003,  2);
                         }
        }
        break;
      case 25:
      case 26:
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case 25:
          jj_consume_token(25);
          break;
        case 26:
          jj_consume_token(26);
          break;
        default:
          jj_la1[21] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
                         ASTGreaterEq jjtn004 = new ASTGreaterEq(JJTGREATEREQ);
                         boolean jjtc004 = true;
                         jjtree.openNodeScope(jjtn004);
        try {
          shiftExpression();
        } catch (Throwable jjte004) {
                         if (jjtc004) {
                           jjtree.clearNodeScope(jjtn004);
                           jjtc004 = false;
                         } else {
                           jjtree.popNode();
                         }
                         if (jjte004 instanceof RuntimeException) {
                           {if (true) throw (RuntimeException)jjte004;}
                         }
                         if (jjte004 instanceof ParseException) {
                           {if (true) throw (ParseException)jjte004;}
                         }
                         {if (true) throw (Error)jjte004;}
        } finally {
                         if (jjtc004) {
                           jjtree.closeNodeScope(jjtn004,  2);
                         }
        }
        break;
      case 27:
        jj_consume_token(27);
               ASTIn jjtn005 = new ASTIn(JJTIN);
               boolean jjtc005 = true;
               jjtree.openNodeScope(jjtn005);
        try {
          shiftExpression();
        } catch (Throwable jjte005) {
               if (jjtc005) {
                 jjtree.clearNodeScope(jjtn005);
                 jjtc005 = false;
               } else {
                 jjtree.popNode();
               }
               if (jjte005 instanceof RuntimeException) {
                 {if (true) throw (RuntimeException)jjte005;}
               }
               if (jjte005 instanceof ParseException) {
                 {if (true) throw (ParseException)jjte005;}
               }
               {if (true) throw (Error)jjte005;}
        } finally {
               if (jjtc005) {
                 jjtree.closeNodeScope(jjtn005,  2);
               }
        }
        break;
      case 28:
        jj_consume_token(28);
        jj_consume_token(27);
                     ASTNotIn jjtn006 = new ASTNotIn(JJTNOTIN);
                     boolean jjtc006 = true;
                     jjtree.openNodeScope(jjtn006);
        try {
          shiftExpression();
        } catch (Throwable jjte006) {
                     if (jjtc006) {
                       jjtree.clearNodeScope(jjtn006);
                       jjtc006 = false;
                     } else {
                       jjtree.popNode();
                     }
                     if (jjte006 instanceof RuntimeException) {
                       {if (true) throw (RuntimeException)jjte006;}
                     }
                     if (jjte006 instanceof ParseException) {
                       {if (true) throw (ParseException)jjte006;}
                     }
                     {if (true) throw (Error)jjte006;}
        } finally {
                     if (jjtc006) {
                       jjtree.closeNodeScope(jjtn006,  2);
                     }
        }
        break;
      default:
        jj_la1[22] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    }
  }
final public void relationalExpression() throws ParseException {
    shiftExpression();
    label_8:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case 19:
      case 20:
      case 21:
      case 22:
      case 23:
      case 24:
      case 25:
      case 26:
      case 27:
      case 28:
        ;
        break;
      default:
        jj_la1[17] = jj_gen;
        break label_8;
      }
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case 19:
      case 20:
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case 19:
          jj_consume_token(19);
          break;
        case 20:
          jj_consume_token(20);
          break;
        default:
          jj_la1[18] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
                       ASTLess jjtn001 = new ASTLess(JJTLESS);
                       boolean jjtc001 = true;
                       jjtree.openNodeScope(jjtn001);
        try {
          shiftExpression();
        } 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,  2);
                       }
        }
        break;
      case 21:
      case 22:
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case 21:
          jj_consume_token(21);
          break;
        case 22:
          jj_consume_token(22);
          break;
        default:
          jj_la1[19] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
                       ASTGreater jjtn002 = new ASTGreater(JJTGREATER);
                       boolean jjtc002 = true;
                       jjtree.openNodeScope(jjtn002);
        try {
          shiftExpression();
        } catch (Throwable jjte002) {
                       if (jjtc002) {
                         jjtree.clearNodeScope(jjtn002);
                         jjtc002 = false;
                       } else {
                         jjtree.popNode();
                       }
                       if (jjte002 instanceof RuntimeException) {
                         {if (true) throw (RuntimeException)jjte002;}
                       }
                       if (jjte002 instanceof ParseException) {
                         {if (true) throw (ParseException)jjte002;}
                       }
                       {if (true) throw (Error)jjte002;}
        } finally {
                       if (jjtc002) {
                         jjtree.closeNodeScope(jjtn002,  2);
                       }
        }
        break;
      case 23:
      case 24:
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case 23:
          jj_consume_token(23);
          break;
        case 24:
          jj_consume_token(24);
          break;
        default:
          jj_la1[20] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
                         ASTLessEq jjtn003 = new ASTLessEq(JJTLESSEQ);
                         boolean jjtc003 = true;
                         jjtree.openNodeScope(jjtn003);
        try {
          shiftExpression();
        } catch (Throwable jjte003) {
                         if (jjtc003) {
                           jjtree.clearNodeScope(jjtn003);
                           jjtc003 = false;
                         } else {
                           jjtree.popNode();
                         }
                         if (jjte003 instanceof RuntimeException) {
                           {if (true) throw (RuntimeException)jjte003;}
                         }
                         if (jjte003 instanceof ParseException) {
                           {if (true) throw (ParseException)jjte003;}
                         }
                         {if (true) throw (Error)jjte003;}
        } finally {
                         if (jjtc003) {
                           jjtree.closeNodeScope(jjtn003,  2);
                         }
        }
        break;
      case 25:
      case 26:
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case 25:
          jj_consume_token(25);
          break;
        case 26:
          jj_consume_token(26);
          break;
        default:
          jj_la1[21] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
                         ASTGreaterEq jjtn004 = new ASTGreaterEq(JJTGREATEREQ);
                         boolean jjtc004 = true;
                         jjtree.openNodeScope(jjtn004);
        try {
          shiftExpression();
        } catch (Throwable jjte004) {
                         if (jjtc004) {
                           jjtree.clearNodeScope(jjtn004);
                           jjtc004 = false;
                         } else {
                           jjtree.popNode();
                         }
                         if (jjte004 instanceof RuntimeException) {
                           {if (true) throw (RuntimeException)jjte004;}
                         }
                         if (jjte004 instanceof ParseException) {
                           {if (true) throw (ParseException)jjte004;}
                         }
                         {if (true) throw (Error)jjte004;}
        } finally {
                         if (jjtc004) {
                           jjtree.closeNodeScope(jjtn004,  2);
                         }
        }
        break;
      case 27:
        jj_consume_token(27);
               ASTIn jjtn005 = new ASTIn(JJTIN);
               boolean jjtc005 = true;
               jjtree.openNodeScope(jjtn005);
        try {
          shiftExpression();
        } catch (Throwable jjte005) {
               if (jjtc005) {
                 jjtree.clearNodeScope(jjtn005);
                 jjtc005 = false;
               } else {
                 jjtree.popNode();
               }
               if (jjte005 instanceof RuntimeException) {
                 {if (true) throw (RuntimeException)jjte005;}
               }
               if (jjte005 instanceof ParseException) {
                 {if (true) throw (ParseException)jjte005;}
               }
               {if (true) throw (Error)jjte005;}
        } finally {
               if (jjtc005) {
                 jjtree.closeNodeScope(jjtn005,  2);
               }
        }
        break;
      case 28:
        jj_consume_token(28);
        jj_consume_token(27);
                     ASTNotIn jjtn006 = new ASTNotIn(JJTNOTIN);
                     boolean jjtc006 = true;
                     jjtree.openNodeScope(jjtn006);
        try {
          shiftExpression();
        } catch (Throwable jjte006) {
                     if (jjtc006) {
                       jjtree.clearNodeScope(jjtn006);
                       jjtc006 = false;
                     } else {
                       jjtree.popNode();
                     }
                     if (jjte006 instanceof RuntimeException) {
                       {if (true) throw (RuntimeException)jjte006;}
                     }
                     if (jjte006 instanceof ParseException) {
                       {if (true) throw (ParseException)jjte006;}
                     }
                     {if (true) throw (Error)jjte006;}
        } finally {
                     if (jjtc006) {
                       jjtree.closeNodeScope(jjtn006,  2);
                     }
        }
        break;
      default:
        jj_la1[22] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    }
  }
boolean relational expressions (level 5)