如何将 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;
我正在使用 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;