如何将 Grammar::Tracer 与单位范围语法一起使用?

How to use Grammar::Tracer with a unit scoped grammar?

我正在使用 Grammar::Tracer,设置如下:

p.p6

use v6;
use lib '.';
use MyGrammar;
my $res = MyGrammar.parse('hello 6 9 bye');
say $res;

MyGrammar.pm6:

unit grammar MyGrammar;
use Grammar::Tracer;

rule TOP { [<number> || <word> ]* }
rule number { \d+ }
rule word { \w+}

但是跟踪没有开启。我猜这是因为语法 MyGrammar 不在 use Grammar::Tracer 语句的词法范围内?

Grammar::Tracer 模块通过导出自定义元类来代替 grammar 关键字的默认元类来工作。这必须在遇到关键字 grammar 之前就已经存在,因为那是我们解析并提交要用于所声明类型的元类的时候。

解决方案是将 use 语句放在 grammar 声明之前:

use Grammar::Tracer;
unit grammar MyGrammar;