It seems there might be a bug in eto.parse when defining terminals
here, where it is checking for "==", not ":=". This should set it so that there is no whitespace defined between its children, as you have defined in your grammar.
for ebnf grammars in eto.parse, a rule defined with '=' will have its children separated by whitespace.
A rule defined with ':=' should have no whitespace.
Hope this helps. If you end up fixing the bug, can you send a pull request? otherwise I'll fix it up.
Thanks!
Curtis.