The repeat[]
provides a more powerful and flexible mechanism for repeating a parser.
There are grammars that are impractical and cumbersome, if not impossible,
for the basic EBNF iteration syntax (Kleene
and the Plus)
to specify. Examples:

A 256 bit binary string (1..256 1s or 0s). (For the purpose of this example,
we will be testing only 16 bits.)

test_parser("1011101011110010",repeat(16)[lit('1')|'0']);

The Loop parsers can be dynamic. Consider the parsing of a binary file
of Pascal-style length prefixed string, where the first byte determines
the length of the incoming string. Here's a sample input:

This trivial example cannot be practically defined in traditional EBNF.
Although some EBNF variants allow more powerful repetition constructs
other than the Kleene Star, we are still limited to parsing fixed strings.
The nature of EBNF forces the repetition factor to be a constant. On
the other hand, Spirit allows the repetition factor to be variable at
run time. We could write a grammar that accepts the input string above.
Example using phoenix: