2017-07-27 87 views
4

How can I pass arguments to a Perl 6 grammar?我作爲submerse的一部分傳遞了一個規則的參數。我想知道如何在語法中完全做到這一點。假設我有這樣的事情:Perl 6規則如何將參數傳遞給另一個規則?

grammar TryIt { 
    rule TOP   { \d+ <stuff> } 
    rule stuff ($count) { <[ \S A..Z ]>{$count} } 
    } 

my $match = TryIt.parse: "123 ABCD"; 
say $match; 

我如何通過從TOPstuff參數?我沒有找到任何例子,並且關於附近人物的各種猜測都沒有奏效。

回答

4

這些形式都工作:

<stuff(...)> 
<stuff: ...> 

不知道他們的用戶文檔中會上市,但S05:的正則表達式和規則設計文件has a section on them


注意,一個規則的內部,像$0$/反向引用只能保證的序列點之後可用,e.g塊的開口支架。一個空塊{}的作品。

實施例:

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」 
相關問題