code: static boolean isCommutative(Token type) {
      switch (type) {
        case MUL:
        case BITOR:
        case BITXOR:
        case BITAND:
          return true;
        default:
          return false;
      }
    }
docs: Returns true if the operator is commutative.
  e.g. (a * b) * c = c * (b * a)
  Note 1: "+" is not commutative because it is also the concatenation
  for strings. e.g. "a" + (1 + 2) is not "a" + 1 + 2
  Note 2: only operations on literals and pure functions are commutative.