Parsing declaratively (by e.g. declaring EBNF) is really interesting.
It sort of mushes together the two steps ("lexing" and "parsing"), which, as far as I can tell, are traditionally distinguished from one another.
I guess that the "token" definitions really just reside within the EBNF rules..