Согласно документации, вы можете переопределить токен ws
в грамматике, в некоторых случаях этот токен вызывается автоматически, например:
grammar Numbers { rule TOP { \d \d } };
my $result = Numbers.parse("3 \n 3");
say $result.perl
# OUTPUT: «Match.new(pos => 5, made => Any, from => 0, hash => Map.new(()), orig => "3 \n 3", list => ())»
Одним из преимуществ переопределения ws
может быть то, что оно не будет выброшено. Хорошо, я куплю это и использую для ws
точно такое же определение, которое используется внутри:
grammar Numbers { rule TOP { \d \d }; regex ws { <!ww> \s* } };
my $result = Numbers.parse("3 \n 3");
say $result<ws> # OUTPUT: «Nil»
Соответствие работает, но $ result все еще отбрасывается (переопределение этого для другого токена, который не использует ws по умолчанию, будет работать). Так всегда ли ws
отбрасывается?
Обновление Это, вероятно, связано с этой ошибкой Rakudo