code: JCExpression term2Rest(JCExpression t, int minprec) {
          JCExpression[] odStack = newOdStack();
          Token[] opStack = newOpStack();
  
          // optimization, was odStack = new Tree[...]; opStack = new Tree[...];
          int top = 0;
          odStack[0] = t;
          int startPos = token.pos;
          Token topOp = Tokens.DUMMY;
          while (prec(token.kind) >= minprec) {
              opStack[top] = topOp;
              top++;
              topOp = token;
              nextToken();
              odStack[top] = (topOp.kind == INSTANCEOF) ? parseType() : term3();
              while (top > 0 && prec(topOp.kind) >= prec(token.kind)) {
                  odStack[top-1] = makeOp(topOp.pos, topOp.kind, odStack[top-1],
                                          odStack[top]);
                  top--;
                  topOp = opStack[top];
              }
          }
          Assert.check(top == 0);
          t = odStack[0];
  
          if (t.hasTag(JCTree.Tag.PLUS)) {
              t = foldStrings(t);
          }
  
          odStackSupply.add(odStack);
          opStackSupply.add(opStack);
          return t;
      }
docs: /*  Expression2Rest = {infixop Expression3}
  | Expression3 instanceof Type
  infixop         = "||"
  | "&&"
  | "|"
  | "^"
  | "&"
  | "==" | "!="
  | "<" | ">" | "<=" | ">="
  | "<<" | ">>" | ">>>"
  | "+" | "-"
  | "*" | "/" | "%"