final public SimpleNode Inv_exp() throws ParseException {
                      /*@bgen(jjtree) Inv_exp */
  SimpleNode jjtn000 = new SimpleNode(JJTINV_EXP);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
    try {
      label_1:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case VAR_TAG:
          ;
          break;
        default:
          jj_la1[0] = jj_gen;
          break label_1;
        }
        VarDecl();
      }
      OrExpr();
          jjtree.closeNodeScope(jjtn000, true);
          jjtc000 = false;
         {if (true) return jjtn000;}
    } catch (Throwable jjte000) {
          if (jjtc000) {
            jjtree.clearNodeScope(jjtn000);
            jjtc000 = false;
          } else {
            jjtree.popNode();
          }
          if (jjte000 instanceof RuntimeException) {
            {if (true) throw (RuntimeException)jjte000;}
          }
          if (jjte000 instanceof ParseException) {
            {if (true) throw (ParseException)jjte000;}
          }
          {if (true) throw (Error)jjte000;}
    } finally {
          if (jjtc000) {
            jjtree.closeNodeScope(jjtn000, true);
          }
    }
    throw new Error("Missing return statement in function");
  }