[Pharo-project] learning rewrite rules

Stéphane Ducasse stephane.ducasse at inria.fr
Thu Nov 4 14:04:44 CET 2010


no data folder?
probably forgot the push

  RewriteRules ls
Data/                       RewriteRules.tex
Lint.odt                    program-checking-paper.tex
Lint.tex
  RewriteRules git push
Everything up-to-date
  RewriteRules 



Stef

On Nov 4, 2010, at 1:45 PM, Lukas Renggli wrote:

> I don't see any french text. Just a PDF of a blog article I wrote, the
> LaTeX source of the program-checking paper, and an empty LaTeX
> template.
> 
> Lukas
> 
> On 4 November 2010 13:30, Stéphane Ducasse <stephane.ducasse at inria.fr> wrote:
>> Normally I added some text in french :(
>> do not pay attention too much on the style
>> dump information and like that we can get material to work on
>> I think that having examples is the key point to get started.
>> 
>> 
>>> 
>>> On 4 November 2010 10:09, Stéphane Ducasse <stephane.ducasse at inria.fr> wrote:
>>>> I'm adding some other files (in french) :(
>>>> but I'm stuck with git....
>>> 
>>> git pull
>>> git add french-rewrite.tex
>>> git commit
>>> git push
>>> 
>>>>> 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 <stephane.ducasse at inria.fr> 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 ``@.statements]'
>>>>>>> 
>>>>>>> The match expression
>>>>>>> 
>>>>>>>    `@browser ``@.statements
>>>>>>> 
>>>>>>> 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:
>>>>>>> 
>>>>>>>    `@.statements
>>>>>>> 
>>>>>>> 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: '`@.statements');
>>>>>>>            " return the rewritten tree "
>>>>>>>            tree }
>>>>>>> 
>>>>>>> Cheers,
>>>>>>> Lukas
>>>>>>> 
>>>>>>> --
>>>>>>> Lukas Renggli
>>>>>>> www.lukas-renggli.ch
>>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> --
>>>>> Lukas Renggli
>>>>> www.lukas-renggli.ch
>>>>> 
>>>> 
>>>> 
>>>> 
>>> 
>>> 
>>> 
>>> --
>>> Lukas Renggli
>>> www.lukas-renggli.ch
>>> 
>> 
>> 
>> 
> 
> 
> 
> -- 
> Lukas Renggli
> www.lukas-renggli.ch
> 





More information about the Pharo-project mailing list