Ответ 1
Если вы сфокусированы на создании сообщений для пользователей вашей грамматики, см. Генерация хороших ошибок синтаксического анализа с помощью анализатора и Grammar :: ErrorReporting.
Остальная часть этого ответа об отладке.
Во-первых, вы можете встроить произвольные замыкания (код) в правила Perl 6 (или токены или регулярные выражения). Просто введите { your code goes here }
в середине правила. Таким образом, вы могли бы просто посыпать { say... }
операторы там, где это полезно для отладки. (Обратите внимание, что $/
и его родственники $0
, $1
и т.д. И именованные суб-захваты $<foo>
и т.д. Автоматически обновляются для ссылки на текущий объект Match
и его суб-захваты, соответствующие правилу включения, непосредственно перед входом в замыкание. так что вы можете проанализировать, как происходит совпадение в этой точке регулярного выражения.)
Но есть и лучшие варианты.
Используете ли вы дистрибутив Rakudo Star с "батарейками"? (Вы должны быть, если у вас нет веских причин не делать этого.) Если это так, вы можете добавить строку, use Grammar::Tracer;
(как описано в слайдах на http://www.jnthn.net/papers/2011-yapceu-grammars.pdf), чтобы получить полный след анализа.
Лично я предпочитаю использовать отладчик Rakudo, который предоставляет все, что делает Grammar :: Tracer, а также многое другое (один шаг, точки останова и т.д. Всего кода Perl 6, включая регулярные выражения и грамматики). Отладчик представлен в этом видео.
Если у вас есть еще вопросы, я рекомендую вам посетить всегда дружелюбный IRC-канал # perl6.