On Wed, Nov 16, 2005 at 08:11:24AM -0800, jerry gay wrote: > from a read of the spec, the expected behavior of this code is unclear to me. > > in the rule, i'm matching the builtin whitespace rule, creating an > alias with the same name as the named rule, and matching the builtin > rule again. this brings up a few questions: > > does the alias replace the named rule or coexist with it?
It coexists. > when does the binding of the alias to the pattern occur? It essentially occurs when the rule is compiled; given / <ws> $<ws>:=(foo) <ws> / we have three things capturing into $/<ws> in the same lexical scope, thus $/<ws> will be an array of match objects. > .sub 'main' :main > load_bytecode 'PGE.pbc' > load_bytecode 'PGE/dumper.pir' > .local pmc p6rule, rulesub, match > .local string target > .local int try > > p6rule = find_global 'PGE', 'p6rule' > rulesub = p6rule('<ws> $<ws>:=(foo) <ws>') > > try = 1 > > target = ' foo ' > bsr Do_match > > target = ' foofoo' > bsr Do_match > > target = 'foofoofoo' > bsr Do_match > > goto End > > Do_match: > match = rulesub(target) > print 'match #' > print try > print "\n" > match.'dump'() > print "\n" > inc try > ret > End: > .end > > here's what pge currently does, but i'm not certain this behavior is > correct, because it's implementation is not yet complete. > > match #1 > : < foo @ 0> 0 > <ws>[0]: < @ 0> 0 > <ws>[1]: <foo @ 1> 0 > <ws>[2]: < @ 4> 0 > > match #2 > :0 > > match #3 > :0 > > is this what you expected? Yes. Pm