docs: final public void Multiplication() throws ParseException {
      Unary();
      label_13:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case MULT:
        case DIV0:
        case DIV1:
        case MOD0:
        case MOD1:
          ;
          break;
        default:
          jj_la1[27] = jj_gen;
          break label_13;
        }
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case MULT:
          jj_consume_token(MULT);
                    AstMult jjtn001 = new AstMult(JJTMULT);
                    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,  2);
                    }
          }
          break;
        case DIV0:
        case DIV1:
          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
          case DIV0:
            jj_consume_token(DIV0);
            break;
          case DIV1:
            jj_consume_token(DIV1);
            break;
          default:
            jj_la1[28] = jj_gen;
            jj_consume_token(-1);
            throw new ParseException();
          }
                             AstDiv jjtn002 = new AstDiv(JJTDIV);
                             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,  2);
                             }
          }
          break;
        case MOD0:
        case MOD1:
          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
          case MOD0:
            jj_consume_token(MOD0);
            break;
          case MOD1:
            jj_consume_token(MOD1);
            break;
          default:
            jj_la1[29] = jj_gen;
            jj_consume_token(-1);
            throw new ParseException();
          }
                             AstMod jjtn003 = new AstMod(JJTMOD);
                             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,  2);
                             }
          }
          break;
        default:
          jj_la1[30] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
      }
    }