Title ^

PGE::Hs - Match and display PGE rules as Haskell expressions


(You need to run make PGE-Hs.pbc in compilers/pge first.)

    .sub _main
        load_bytecode "PGE.pbc"
        load_bytecode "PGE/Hs.pir"
        $P0 = get_hll_global ["PGE";"Hs"], "match"
        $S0 = $P0("Hello", "(...)*$")
        print $S0   # PGE_Match 2 5 [PGE_Array [PGE_Match 2 5 [] []]] []


The Haskell-side data structure is defined thus:

    data MatchPGE
        = PGE_Match Int Int [MatchPGE] [(String, MatchPGE)]
        | PGE_Array [MatchPGE]
        | PGE_String String
        | PGE_Fail
        deriving (Show, Eq, Ord, Read)

This PGE-Hs.pbc is built separately (not by default). The reason is because it's intended to be bundled with Pugs, so as to make Pugs usable with vanilla Parrot from 0.2.0 on, using either an external parrot executable, or a linked libparrot.

In external parrot mode, Parrot's include path looks into the .pbc files inside the library tree first, then look into the current directory, .. Hence this file includes, rather than loads, the PGE.pbc library, because if Pugs is shipped with its own copy of PGE.pbc, Parrot would ignore that file and prefer to load the one in the Parrot tree instead.

Granted, it is possible to pass in Pugs's own library path into an environment variable (maybe PARROT_LIBS?), but as this was not in the 0.3.0 release, I (audreyt) decided to take the easy route. :-)


This is an initial sketch. The dump format may change, and the whole thing may be taken out or refactored away at any moment.