I'm adding some other files (in french) :( but I'm stuck with git....
> 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 >
