On Wed Jun 03 06:08:46 2009, haakonsk wrote: > This doesn't work: > grammar A { rule TOP { 'a' ' b' {*} } }; my $m = A.parse('a b'); say $/; > Result: Empty string > Expected result: "a b"
Rakudo is correct here. Whitespace in rules is metasyntactic -- it gets replaced by <.ws>. So, the above rule is really equivalent to token { <.ws> 'a' <.ws> ' b' <.ws> {*} <.ws> } The <.ws> that is inserted between the 'a' and ' b' thus consumes all of the whitespace, leaving nothing for the leading space of ' b' to match. > And this doesn't work: > grammar A { rule TOP { 'a' <blank> 'b' {*} } }; my $m = A.parse('a > b'); say $/; > Result: Empty string > Expected result: "a b" Same issue here -- the whitespace after 'a' eats up any whitespace that might be consumed by the <blank>. You likely want either C<regex> or C<token> here instead of C<rule>. Closing ticket, thanks! Pm