【发布时间】:2018-10-08 06:06:58
【问题描述】:
Grammars 是类,因此,它们应该遵守与其他类相同的规则。但是,从语法中导出正则表达式似乎存在问题:
grammar Word {
token TOP { ^ <letters> $}
regex letters is export { <[\w] - [_]>+ };
sub exported () is export { return 'exported' };
}
import Word;
say exported;
say "what_ever" ~~ &letters;
import 有效地导入了exported,它不会抱怨letters。但是,最后一行出现了这个错误:
Type check failed in binding to parameter '<anon>'; expected Word but got Match (Match.new(orig => "what_ev...)
如果将&letters 更改为/<letters>/,则会发生同样的错误,这是调用正则表达式的另一种方式。该错误似乎指出letters 在语法中声明它们时有一些隐藏的参数,因为这有效:
module Regexes {
my regex letters is export { <[\w] - [_]>+ };
}
import Regexes;
say "what_ever" ~~ /<letters>/;
# Output:
# 「what」
# letters => 「what」
那么该参数实际上是什么?我们如何有效地使用从Grammar 导出的正则表达式/令牌/规则
【问题讨论】: