On Thu, Jun 30, 2005 at 11:46:55PM -0400, Allison Randal wrote:
> On Jun 25, 2005, at 20:38, Patrick R. Michaud wrote:
> 
> >I've just checked in changes to PGE that enable it to support
> >grammars, as well as some more built-in rules...
> 
> These are totally awesome. On the plane today, I converted the Punie 
> parser over to use the shiny new grammars. My one frustration so far is 
> that subrule calls for a rule from a grammar always have to be fully 
> specified, even if the subrule is in the same grammar. 

Well, it's not *supposed* to work that way -- it's supposed to work
the way you expect it to -- i.e., "<expr>" in a rule calls the the "expr"
rule in the current grammar.

>     p6rule("1", "PunieGrammar", "term")
>     p6rule("print \s* <expr>", "PunieGrammar", "gprint")
>     p6rule("<gprint> | <term>", "PunieGrammar", "expr")
>     p6rule("<expr>;", "PunieGrammar", "line")

It seems to work for me (r8486)...

[EMAIL PROTECTED] pge]$ cat punie.pir
.sub main @MAIN
    .local pmc p6rule
    .local pmc myrule
    .local pmc match

    load_bytecode 'PGE.pir'
    p6rule = find_global "PGE", "p6rule"

    p6rule("1", "PunieGrammar", "term")
    p6rule("print \s* <expr>", "PunieGrammar", "gprint")
    p6rule("<gprint> | <term>", "PunieGrammar", "expr")
    p6rule("<expr>;", "PunieGrammar", "line")

    myrule = p6rule("<PunieGrammar::line>")

    match = myrule("print print 1;")
    match."dump"()
.end
$ parrot punie.pir
: <print print 1; @ 0> 0
<PunieGrammar::line>: <print print 1; @ 0> 0
<PunieGrammar::line><expr>: <print print 1 @ 0> 0
<PunieGrammar::line><expr><gprint>: <print print 1 @ 0> 0
<PunieGrammar::line><expr><gprint><expr>: <print 1 @ 6> 0
<PunieGrammar::line><expr><gprint><expr><gprint>: <print 1 @ 6> 0
<PunieGrammar::line><expr><gprint><expr><gprint><expr>: <1 @ 12> 1
<PunieGrammar::line><expr><gprint><expr><gprint><expr><term>: <1 @ 12> 1
$ 

Perhaps you can send me a copy of your code so I can take a look...?

Pm

Reply via email to