如何在单位范围的语法中使用Grammar :: Tracer?

时间:2019-04-08 09:12:46

标签: grammar perl6

我将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语句的词汇范围内吗?

1 个答案:

答案 0 :(得分:7)

Grammar::Tracer模块的工作方式是导出一个自定义元类,以代替grammar关键字的默认元类。在遇到关键字grammar之前,它必须已经存在,因为那是当我们解析并提交要用于声明类型的元类时。

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

use Grammar::Tracer;
unit grammar MyGrammar;