code: protected Expression product() {
          Expression left = power();
          if (tokenizer.current().isSymbol("*")) {
              tokenizer.consume();
              Expression right = product();
              return reOrder(left, right, BinaryOperation.Op.MULTIPLY);
          }
          if (tokenizer.current().isSymbol("/")) {
              tokenizer.consume();
              Expression right = product();
              return reOrder(left, right, BinaryOperation.Op.DIVIDE);
          }
          if (tokenizer.current().isSymbol("%")) {
              tokenizer.consume();
              Expression right = product();
              return reOrder(left, right, BinaryOperation.Op.MODULO);
          }
          return left;
      }
docs: Parser rule for parsing a product.
  <p>
  A product is a <tt>power</tt> which might be followed by *, / or % as operator and another <tt>product</tt>.
  
  @return a product parsed from the given input