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