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

如何将Grammar::Tracer与单元范围的语法一起使用?,grammar,raku,Grammar,Raku,我正在使用以下设置: 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

我正在使用以下设置:

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+}
单位语法;
使用语法::Tracer;
规则顶部{[|]*}
规则编号{\d+}
规则字{\w+}

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

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

解决方案是将
use
语句置于
语法
声明之前:

use Grammar::Tracer;
unit grammar MyGrammar;