Perl 6规则如何将参数传递给另一个规则?

时间:2017-07-27 05:19:44

标签: regex grammar perl6

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附近的猜测没有用。

1 个答案:

答案 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」