in reply to Re^3: I wrote an expression parser for PPI
in thread I wrote an expression parser for PPI

Ah yes, you are of course correct about eval. I will have to think about it. So it'll need a Perl process with a transpiler for evals, that will be slow. (I was planning to cache compiled Perl libraries that are use:d/require:d, it is high on the todo list.)

I remember that Perl-in-the-browser Webassembly from before... Fun, but specialized.

I remember Perlito, a subset so no CPAN modules? But I missed news about his PerlOnJava. That was cool! It is done by a real compiler guy. And he has done probably a work year more than me (I am just doing autovivification). But his JVM target is really ambitious, while I selected the easiest target possible (with PCRE etc). I hope he gets it to production ready.

Replies are listed 'Best First'.
Re^5: I wrote an expression parser for PPI
by LanX (Saint) on Jan 08, 2026 at 22:04 UTC
    I'm not sure how or if PPI handles prototyped subs.

    But I bet you need to take care in your project to handle them manually when they are exported. PPI as static parser might not attempt to recognize try {} beeing exported by use Try::Tiny ...

    Good luck with that.

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    see Wikisyntax for the Monastery

      Yep, PPI worked. Prototypes are half done. The definitions of constants and prototypes are collected and sent in as a parameter to the expression parser.(When e.g. parsing lists, you of course need to know if a sub is declared to use n parameters.)
        > Yep, PPI worked

        Not sure if you got my point.

        PPI is a static parser, this (should?) mean if it sees at "compile" time something like ...

        • use Try::Tiny;
        • it won't try to search @INC
        • to require the first .../Try/Tiny.pm
        • run Try::Tiny->import()
        • "export" try (&) {...} (among others)
        • with an accurate prototype

        to keep on parsing correctly if it encounters a try {...}

        I haven't tested this, but I bet you will need to patch PPI to handle this.°

        At least if you want to construct a decent Perl dialect and not just some interesting demos.

        I say dialect because it's very hard to achieve full compatibility.

        OTOH once your parser and compiler really work, you can try to transpile it into your target languages to bootstrap a stand-alone dialect which is consistent in all those languages.

        At least in theory...

        Cheers Rolf
        (addicted to the Perl Programming Language :)
        see Wikisyntax for the Monastery

        updates

        °) There is a whole bunch of more things happening at compile-time...