在How can I pass arguments to a Perl 6 grammar?中,我将一个参数传递给了一个规则,作为子模拟的一部分。我想知道如何在语法中完全做到这一点。假设我有类似的东西:
grammar TryIt {
rule TOP { \d+ <stuff> }
rule stuff ($count) { <[ \S A..Z ]>{$count} }
}
my $match = TryIt.parse: "123 ABCD";
say $match;
如何将TOP
的参数传递给stuff
?我没有找到任何例子,各种关于parens附近的猜测没有用。
答案 0 :(得分:4)
这些形式都有效:
<stuff(...)>
<stuff: ...>
不确定用户文档中列出的位置,但 S05:正则表达式和规则设计文档has a section on them。
请注意,在规则内部,$0
和$/
之类的反向引用仅保证在序列点之后可用,例如块的左括号。空块{}
有效。
示例:
grammar TryIt {
token TOP { (\d+) \s {} <stuff($0)> .* }
token stuff ($count) { <[ A..Z ]> ** {$count} }
}
say TryIt.subparse: "3 ABCDEFG";
输出:
「3 ABCDEFG」
0 => 「3」
stuff => 「ABC」