The scanner ignores spaces, though this causes problems for my parser
when presented with tokens for a string such as: John & Co.

The above parser rule will return: John&Co.

Changing it to: { result = "#{val[0]} #{val[1]}"} will fix it, yet it
creates problems when given a string like: Bill's
As it will return: Bill ' s

I think I need another start condition enabled by WORD, where spaces
will not be ignored

:WORD \s+ { [:SPACE, text ] }
\s+

but I don't want to explicitly acknowledge a :SPACE token, I'd rather
just include it in text.
Actually the above start condition is ambiguous, how do I know when
the space is separating a token or part of a word?

Any ideas how I can keep punctuation and spaces as is when matching
the parser's name rule?