in reply to Re: Perl 6 grammar question
in thread Perl 6 grammar question

I didn't know that lisp had it, thanks for mentioning it here. However in Perl 5 we are introducing it through a module(.pm) file which is pretty much different than controlling the parser itself. Apart from lisp and Perl 6 which other language has this feature(Modern languages in wide use today like Python, ruby, Java etc.)

Replies are listed 'Best First'.
Re^3: Perl 6 grammar question
by ikegami (Patriarch) on Mar 12, 2010 at 08:35 UTC

    However in Perl 5 we are introducing [given] through a module(.pm) file which is pretty much different than controlling the parser itself.

    That's wrong on two levels.

    First, all the module does is to flip a switch that controls whether the parser treats given as a keyword or not. feature most definitely controls the parser itself.

    Secondly, it makes no sense to say that adding keywords dynamically is a good thing and to say that adding keywords using a module is a bad thing. It's a contradiction.


      U'r right, but I never implied adding them through a module is bad or adding them dynamically is good. Of course such features, although powerful must be used with caution and judiciously. That is true for any powerful but use-with-caution feature.

      What I meant was, take for example 'given', it can be implemented in a module using if/else statements. Here what you are doing is using existing features of a language to build more abstract features. This is good as well... But my point was that this is not the same as controlling the parsing itself.

      I would not like start a debate on which of them is better. Users are best to decide on that. To put it more appropriately if there is more than a way to achieve it, its better.

        This is good as well... But my point was that this is not the same as controlling the parsing itself.

        I know, and it's not always true. In theory, the module could control the parser to create said if/then structure, and that would be great.

        It's even possible to do this in Perl5 using source filters. When you using filters, you need to provide a parser. Seeing as you have to write the parser, you are definitely controlling it.

        What I meant was, take for example 'given', it can be implemented in a module using if/else statements

        Unfortunately, not really. Perl5 is not expendable in that manner without using source filters.

        Filters replace the builtin parser. That means you need to completely reimplement a Perl parser if you want that resembles Perl. That's what Switch does and that's why it's a source of headaches.

        What you actually want is integration into the existing parser, starting with the ability to add keywords. And that's what Perl6 can do.

        * — Perl doesn't differentiate modules from scripts. It's all Perl code.

        Actually no - the syntax of given can not be implemented in Perl through a module1. You can use source filters to rewrite the program, like Switch did, but you will then get all the problems that are associated with source filters.

        1 Discounting Devel::Declare, which for Perl 5.10 tries to allow new keywords through modules.

        Update: Arunbear tells me that Devel::Declare only requires Perl 5.8.1, so modifying the parse process might be possible even there.

Re^3: Perl 6 grammar question
by Corion (Patriarch) on Mar 12, 2010 at 08:19 UTC

    I'm not aware of any "modern" language having that feature, at least outside of the languages without much syntax (Scheme, Lisp derivatives), where it is easy to introduce new forms or which have (real) macros as a built-in language feature.