docs: final public void Unary() throws ParseException {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case MINUS:
        jj_consume_token(MINUS);
                    AstNegative jjtn001 = new AstNegative(JJTNEGATIVE);
                    boolean jjtc001 = true;
                    jjtree.openNodeScope(jjtn001);
        try {
          Unary();
        } 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);
                    }
        }
        break;
      case NOT0:
      case NOT1:
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case NOT0:
          jj_consume_token(NOT0);
          break;
        case NOT1:
          jj_consume_token(NOT1);
          break;
        default:
          jj_la1[31] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
                            AstNot jjtn002 = new AstNot(JJTNOT);
                            boolean jjtc002 = true;
                            jjtree.openNodeScope(jjtn002);
        try {
          Unary();
        } 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, true);
                            }
        }
        break;
      case EMPTY:
        jj_consume_token(EMPTY);
                    AstEmpty jjtn003 = new AstEmpty(JJTEMPTY);
                    boolean jjtc003 = true;
                    jjtree.openNodeScope(jjtn003);
        try {
          Unary();
        } 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, true);
                    }
        }
        break;
      case START_SET_OR_MAP:
      case INTEGER_LITERAL:
      case FLOATING_POINT_LITERAL:
      case STRING_LITERAL:
      case TRUE:
      case FALSE:
      case NULL:
      case LPAREN:
      case LBRACK:
      case IDENTIFIER:
        Value();
        break;
      default:
        jj_la1[32] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    }