http://qs1969.pair.com?node_id=1061221


in reply to Parsing and translating Perl Regexes

See ppi_dumper or Re: ppiwx / wxPPI / wxppixregexp xPPIx_Regexp_linecol_onize / PPIx::Regexp::Element::column_number or Re: Wanted: Perl Regex Pretty Printer (almost, rxrx, rxplain)

PPIx::Regexp is pretty good although I've had to enhance it to do proper regexp modifiers propagation ... I've got code (PPIx::Regexp::xplain), still in need of some refactoring ... you can see sample output above at rxplain link

Regexp::Debugger parses the regex, modifies the regex (adds callbacks), and then runs the modified regex, needs to run it so it can explain the regex -- Re^2: Wanted: Perl Regex Pretty Printer (rxrx bug) -- translating to another regex language would require the amount of context/knowledge as explaining -- thats if you want to adapt it (though patching the module)

So I would go with PPIx::Regexp because it doesn't require running the regex in the perl regex engine, does a pretty good job, and is designed for this kind of task

All other solutions (Regexp::Debugger) are too much work -- sure the tokenizer is good, but there is too much context to keep track off .... basically you end up starting from scratch and learning waaaaaaay too much about regexes ... PPIx::Dumper embodies a lot of that knowledge

Replies are listed 'Best First'.
Re^2: Parsing and translating Perl Regexes ( PPIx::Regexp::xplain Regexp::Debugger )
by Anonymous Monk on Nov 05, 2013 at 17:45 UTC

    Would you be willing to provide the particulars on the problems you have with PPIx::Regexp's modifier propagation so I can improve it? Either an RT ticket or electronic mail to wyant at cpan dot org will do the trick.

    Thanks,

    Tom Wyant

      :) But if I do that I'll have to update my program, and I'm lazy and its hard to juggle :)

      Ok, if you're willing to accept this is a roundabout way to report an issue, a work in progress that stalled few months ago, that started organically as a single subroutine walking the PPIx::Regexp tree and grew from there, slowly as I am learning my way around, into its current state, still in need of refactoring ...

      I'll post the full code in two followups but here is an excerpt from ppixregexplain.pl from what I thought were bugs that received a "TODO.*BUG" note. If there are any inaccuracies thinkos typos you have been warned :)

      In in furtherance of blind copying, the corresponding entries from my "test suite" (it tests my eyeball interface)

      And one more

      In the code below the modifiers propagation code is in the following definitions (you can copy/paste each line to find the sub definition)