in reply to Re: Re: Re: Re: Using Perl6 patterns/grammar definition for <I>output</I>?
in thread Using Perl6 patterns/grammar definition for 'output'?

Yes, I definitely want to have an iterator that I can use to traverse a grammar in Perl6. However, a bit more thought gave me this idea:
class MyFormat is CORE::GrammarVisitor { my $fh is public; method date ($node) { $fh.printf("%04d-%02d-%02d", $node ^. qw(year month day)) } } $0.traverse(MyFormat.new(fh=>$*STDOUT)); # default ctor?
This is probably the type of code that would have been instantiated by the hash approach; but is more flexible, and allows for more powerful formating concepts (the visitor can maintain state between the things that it outputs).

But going back to the hash-based approach, I think that it is possible to do something like:

my $sub = sub {print $value}; $sub.MY{'$value'} = 42; $sub();
I think this would be kinda scary though.

--Dave

Update: Fixed typo: MY{'$date'} becomes MY{'$value'}

Replies are listed 'Best First'.
Re: Re^5: Using Perl6 patterns/grammar definition for <I>output</I>?
by John M. Dlugosz (Monsignor) on Sep 06, 2002 at 15:49 UTC
    Yes, the GrammarVisitor derived class is symetric with the grammar itself: members match rules, and you can derive from them to alter things. I like it.

    I don't understand your second listing. $sub.MY{'$date'} is going to set a variable inside that closure, I take it? But the sub never uses it.

    —John