Yeah, where do I find that chapter? There is a section on the AST matching/search in my PhD as Helvetia builds on top of it. Not on the AST rewriting though, Helvetia uses a different mechanism there. Still it might be a good start.
Lukas On 4 November 2010 09:49, Stéphane Ducasse <[email protected]> wrote: > lukas > > I would love to have a chapter on Rules. I have a starter that I wrote long > time ago for the squeak french book > but it would be cool if you could add to it. > > Stef > > On Nov 4, 2010, at 12:55 AM, Lukas Renggli wrote: > >>> If I try to match it like: >>> '`...@browser showOn: `...@target; from: `...@origin; using: [ >>> `...@browser `[email protected]]' >> >> The match expression >> >> �...@browser `[email protected] >> >> doesn't make sense. Statements (.) cannot be a message selector that >> would be expected after a receiver. Also, you cannot have a selector >> list (@) if you don't give also an argument list to match. So the >> closest valid thing is >> >> �...@browser `message >> >> which looks for unary message sends (recursive is not necessary here >> either, because there is nothing to recurse into), or >> >> �...@browser `...@message: `...@message >> >> which looks for arbitrary message sends and recursively into all arguments. >> >>> It seems to only get those appearances which contain a single appearance of >>> browser inside the block. >> >> As I wrote in the previous mail you need to do it with nested >> rewrites. Inside the block you match for any sequence of statements: >> >> �[email protected] >> >> And as replacement you use the `{ :context | ... } trick to perform a >> new rewrite somehow along the following untested lines: >> >> `{ :context | >> RBParseTreeRewriter new >> " replace whatever matched to `...@browser with the variable a " >> replaceTree: (context at: '`...@browser') with: (RBParser >> parseExpression: 'a'); >> " execute on the list of statements " >> executeTree: (context at: '`[email protected]'); >> " return the rewritten tree " >> tree } >> >> Cheers, >> Lukas >> >> -- >> Lukas Renggli >> www.lukas-renggli.ch >> > > > -- Lukas Renggli www.lukas-renggli.ch
