[Pharo-project] learning rewrite rules

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


ok I added the files this is better.
stef

On Nov 4, 2010, at 2:07 PM, Lukas Renggli wrote:

> There is a Data folder, but only the pdf of my blog is in there.
> 
> Lukas
> 
> On 4 November 2010 14:04, Stéphane Ducasse <stephane.ducasse at inria.fr> wrote:
>> 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
>>> 
>> 
>> 
>> 
> 
> 
> 
> -- 
> Lukas Renggli
> www.lukas-renggli.ch
> 





More information about the Pharo-project mailing list