On Tue, Jul 10, 2007 at 04:37:13PM -0700, Dave Whipp wrote:
: One approach would simply be to edit Perl-6.0.0-STD.pm and add some 
: markup. To pick a token at random:
: 
: =p6explain *
: An asterix in a version expression matches any version
: =end
: token whatever { '*' {*} }

Indeed, the example you picked indicates how important context
will be.  There are many different uses of '*', and a p6explain that
simply lists all the possible meanings will be very nearly useless.
You really need to parse the surrounding text to have any idea what
the * means.  And a big reason to make the grammar available (including
all the user-defined bits) is so that nobody ever has to reinvent PPI
for Perl 6.  A p6 explainer that is sensitive to grammar mutations
really needs to do its work by annotating an entire compilation unit
and then making that information available to something resembling
an IDE.  I realize that's a long term goal.  A short term explainer
for standard p6 should at least expect to be fed a complete parsable
expression starting with a noun phrase, since starting with an infix
when the parser is expecting a term will just be completely befuddling
to the user.  Similar considerations end up driving you to parse larger
and larger pieces till you parse the whole file.  (In theory that should
always be enough context, assuming everything you use is available on
your machine, because Perl 6 outlaws magical action at a distance,
particularly across file boundaries.)

Larry

Reply via email to