Hey Jay,
This is because of the recursive descent behaviour of Eto.Parse, which is stateless. It is different from other parsers which use a state machine to determine the possible states at any given position.
For Eto.Parse, if you put wordParser first, it will match and won't try any of the other options. Thus the 'or' (or AlternativeParser) will have found the matching alternate without any knowledge that the following character won't match.
So, when designing grammar with alternates especially, you need to put the alternate that has the 'longest' match first.
Hope this helps!
Curtis.