我在以下设置中使用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;
关于grammar - 如何在单位范围的语法中使用Grammar::Tracer?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55569905/