On Sun, Apr 19, 2015 at 06:31:30PM +0200, mt1957 wrote: : L.s., : : I found a small problem when writing a piece of grammar. A : simplified part of it is shown here; : ... : token tag-body { <body-start> ~ <body-end> <body-text> } : token body-start { '[' } : token body-end { ']' } : token body-text { .*? <?body-end> } : ... :
A couple of things: The ~ is intended primarily for literal delimiters, so you'd typically just see something like: token tag-body { '[' ~ ']' <body-text> } token body-text { .*? <?before ']'> } In this case there would be no body-end rule at all--which means you'd hang the action routine somewhere else. So you could just as easily hang your action routine on tag-body or on body-text, depending on whether you care about whether the match object includes the delimiters. In either case, it doesn't have to attach to the final delimiter. : * Is there a possibility to give the method more information in the : form of boolean flags saying for example that there was a look ahead : match, all in all the parser knows about the way it must seek! One could always set a dynamic variable inside the "not really" rule: token body-text { :my $*NOT-REALLY = 1; .*? <?body-end> } but it's easier to just move the reduction action. Larry