
Perl 6 Grammars – not only for parsing - draegtun
http://ttjjss.wordpress.com/2010/11/21/perl-6-grammars-–-not-only-for-parsing/
======
python_padawan
Congratulations, Perl 6 developers. You are beginning to catch up with Django.
(See <http://docs.djangoproject.com/en/dev/intro/tutorial03/> if you think I'm
being sarcastic.)

Once upon a time, Perl was the de facto language for web development. Then
there was a bit of falling out between the web-centric folks and the server-
centric folks; resulting in PHP. Perl, as a language for web-development,
never really recovered.

I find it kind of sad that it took over a decade and a half-hearted attempt at
rewriting the language before the server-centric folks are even beginning to
understand what the web-centric folks were talking about. :-/

~~~
chromatic
Assume I'm barely competent at both Perl and Python. Can you explain how
looping over repeated regular expressions is more powerful and useful than
core language support for grammars and arbitrary tree transformations?

(I approve of Python's named captures, though even Perl 5 has had those for
almost three years now.)

 _... over a decade and a half-hearted attempt at rewriting the language..._

In truth, the Perl 6 redesign began a few months after Python 3000, in July
2000.

~~~
cookietime
Perhaps you could provide an example of a situation where grammars and
arbitrary tree transformations are more useful than looping over repeated
regular expressions?

If you want others to see the utility of these Perl 6 features, they're going
to need side-by-side syntax-highlighted clear-as-day examples. Otherwise it's
just, "must be some weird Perl 6 feature -- the way I'm doing it in blub works
fine for me".

~~~
chromatic
_Perhaps you could provide an example of a situation where grammars and
arbitrary tree transformations are more useful than looping over repeated
regular expressions?_

Any parsing operation which needs to keep in mind state.

~~~
cookietime
That sounds like a good _brief description_ of an example, but like I said,
for people to get that "a ha" moment, it's got to be written up so it can be
presented right there in front of them.

My current language is already _fairly_ useful for "Any parsing operation
which needs to keep in mind state" ... if you want users to look at Perl 6,
then it's going to take concrete written-out examples. No in-jokes or
historical anecdotes; just actually _show_ how Perl 6 does it better. Over and
over, until it sinks in.

People who don't already know Perl 6 are not going to just take your word for
it. They need to be _shown_ easy-to-follow examples of Perl 6 solving problems
that are more difficult to solve in their current language.

------
scott_s
It would be wonderful if someone more familiar with Perl 6 could give a code
break-down of what is going on.

~~~
Natsu
I only know Perl 5, but I can figure out enough of it to give an educated
guess. It seems like he's using the token returned by the grammar to select a
method of the same name. So when he gets the token e404, he'll call the method
e404 which does a make "404: Not found"

The grammar is something new in Perl 6, but it looks like there are a bunch of
regexes that match different tokens. That makes me wonder how well it handles
a buggy, ambiguous grammar, where the regexes overlap and something could be
parsed as a token of two or more types. First rule wins?

Guess I should read some of chromatic's book over Thanksgiving so I'd
understand more of this...

~~~
colomon
Yes, using

    
    
        Mysite.parse($req, :actions(Mysite::Actions.new))
    

says "Parse $req using grammar Mysite and actions Mysite::Actions.new." When a
token is found, the action method with the same name is called. As I
understand it, the idea with separating token and action like that is one
grammar can be associated with more than one set of actions.

