Author: lwall
Date: 2009-05-28 18:55:52 +0200 (Thu, 28 May 2009)
New Revision: 26953

Modified:
   docs/Perl6/Spec/S05-regex.pod
Log:
[S05] document use of #= tags in {*} actions


Modified: docs/Perl6/Spec/S05-regex.pod
===================================================================
--- docs/Perl6/Spec/S05-regex.pod       2009-05-28 07:40:29 UTC (rev 26952)
+++ docs/Perl6/Spec/S05-regex.pod       2009-05-28 16:55:52 UTC (rev 26953)
@@ -3723,21 +3723,33 @@
 
 Whenever a closure within the grammar returns a C<Whatever> object, the
 grammar engine tries to call a method of the same name as the name of the
-current regex on the action object, passing along the current Match object as
-the first positional argument.
+current regex on the action object, passing along the current C<Match> object 
as
+the first positional argument, and the tag of the reduction (if any) as the 
second
+argument.  The tag is supplied via a C<#=> comment on the same line as the 
C<{*}>.
 
    grammar Integer {
        token TOP {
-           \d+ {*}
+           | 0b<[01]>+ {*}  #= binary
+           | \d+       {*}  #= decimal
        }
    }
    class Twice {
-       method TOP($/) {
-           make 2 * $/;
+       multi method TOP($match, $tag) {
+           my $text = ~$match;
+           $text = :2($text) if $tag eq 'binary'
+           make $text;
        }
+       multi method TOP($match) {
+           make 2 * $match.ast;
+       }
    }
    Integer.parse('21', :action(Twice.new)).ast      # 42
 
+A C<{*}> is assumed at the end of every rule, and the method is
+called with no tag argument.  Note that the implicit C<{*}> is
+I<outside> the alternation in the C<TOP> rule above, despite
+the fact that no explicit square brackets were used.
+
 =back
 
 =head1 Syntactic categories

Reply via email to