public Expression3 summand() throws ParsingException {
        Expression3 left = multiplier(true);
        while (true) {
            if (tryConsume("*")) {
                Expression3 multiplier = multiplier(true);
                if (multiplier == null)
                    throw new IncorrectPositionException(source, currentIndex);
                left = new BinaryOperation<T>(left, multiplier, arithmetics.get("*"));
            } else if (tryConsume("/")) {
                Expression3 multiplier = multiplier(true);
                if (multiplier == null)
                    throw new IncorrectPositionException(source, currentIndex);
                left = new BinaryOperation<T>(left, multiplier, arithmetics.get("/"));
            } else if (tryConsume("mod")) {
                Expression3 multiplier = multiplier(true);
                if (multiplier == null)
                    throw new IncorrectPositionException(source, currentIndex);
                left = new BinaryOperation<T>(left, multiplier, arithmetics.get("mod"));
            } else {
                Expression3 m = multiplier(false);
                if (m != null)
                    left = new BinaryOperation<T>(left, m, arithmetics.get("*"));
                else {
                    return left;
                }
            }
        }
    }