code: protected Expression term() {
          Expression left = product();
          if (tokenizer.current().isSymbol("+")) {
              tokenizer.consume();
              Expression right = term();
              return reOrder(left, right, BinaryOperation.Op.ADD);
          }
          if (tokenizer.current().isSymbol("-")) {
              tokenizer.consume();
              Expression right = term();
              return reOrder(left, right, BinaryOperation.Op.SUBTRACT);
          }
          if (tokenizer.current().isNumber()) {
              if (tokenizer.current().getContents().startsWith("-")) {
                  Expression right = term();
                  return reOrder(left, right, BinaryOperation.Op.ADD);
              }
          }
  
          return left;
      }
docs: Parser rule for parsing a term.
  <p>
  A term is a <tt>product</tt> which might be followed by + or - as operator and another <tt>term</tt>.
  
  @return a term parsed from the given input