In fact I did it because this is irregular in the sense that binary selector 
should not printed with # while the keywords based symbol should. 

(RBScanner on: '(RBScanner on: 'Object < #MyObject
                classVariables: { #A. #B };
                package: #MyPackage'  readStream)
                contents collect: #value   readStream)
                contents collect: #value 
                
>>> 
#('Object' #< #MyObject 'classVariables:' ${ #A $. #B $} $; 'package:' 
#MyPackage)


and back should be 
'Object < #MyObject
                classVariables: { #A. #B };
                package: #MyPackage'

> On 20 Jan 2020, at 16:22, ducasse <[email protected]> wrote:
> 
> Hi sven
> 
> I think that I will have to hack my own, I was just surprised that we do not 
> have a nice way back
> from tokens back to code. (not talking about quote inside strings). 
> 
> 
> String streamContents: [ :s |
>                #('self' 'classVariables:' ${ #A $. #B $}) 
>                       do: [ :each | s print: each ]
>                       separatedBy: [ s space ]].
> 
>  '''self'' ''classVariables:'' ${ #A $. #B $}’
> 
> S.
> 
> 
> 
> 
>> On 20 Jan 2020, at 10:45, Sven Van Caekenberghe <[email protected] 
>> <mailto:[email protected]>> wrote:
>> 
>> #foo printString.  
>> '#foo'
>> 
>> String streamContents: [ :out | out print: #foo ].
>> '#foo'
>> 
>> String streamContents: [ :out | out << #foo ].
>> 'foo'
>> 
>> I would not use #storeOn: directly, I would consider the fact that 
>> String>>#printOn: uses it an implementation detail, and a confusing one at 
>> that.
>> 
>>> On 20 Jan 2020, at 03:54, Eliot Miranda <[email protected] 
>>> <mailto:[email protected]>> wrote:
>>> 
>>> 
>>> 
>>>> On Jan 19, 2020, at 1:50 PM, Stéphane Ducasse <[email protected] 
>>>> <mailto:[email protected]>> wrote:
>>>> 
>>>> 
>>>> The idea that is that I would like to be able to 
>>>> 
>>>> text -> tokens -> text
>>>> 
>>>> For text -> tokens 
>>>> 
>>>>    (RBScanner on: 'self classVariables: { #A . #B }' readStream)
>>>>            contents collect: #value
>>>> 
>>>> 
>>>> I wrote a little method that takes the result of the RBScanner and 
>>>> recreate the text
>>>> But I cannot get this method to work. 
>>>> I’m puzzled because the symbols are eaten.
>>>> 
>>>> 
>>>> expressionStringFrom: aLine
>>>>    
>>>>    "self new 
>>>>            expressionStringFrom:  #('self' 'classVariables:' ${ #A $. #B 
>>>> $}) 
>>>>    >>> 
>>>>            'self classVariables: { A . B }'
>>>>    "
>>>>    ^ String streamContents: [ :s |
>>>>            aLine 
>>>>                    do: [ :each | s << each ]
>>>>                    separatedBy: [ s space ]]
>>>> 
>>>> I tried with print:, printOn:, but I failed. 
>>>> 
>>>> Any idea?
>>> 
>>> With Symbols one needs to use storeOn:
>>> 
>>>> 
>>>> S. 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> --------------------------------------------
>>>> Stéphane Ducasse
>>>> http://stephane.ducasse.free.fr <http://stephane.ducasse.free.fr/> / 
>>>> http://www.pharo.org <http://www.pharo.org/> 
>>>> 03 59 35 87 52
>>>> Assistant: Julie Jonas 
>>>> FAX 03 59 57 78 50
>>>> TEL 03 59 35 86 16
>>>> S. Ducasse - Inria
>>>> 40, avenue Halley, 
>>>> Parc Scientifique de la Haute Borne, Bât.A, Park Plaza
>>>> Villeneuve d'Ascq 59650
>>>> France
> 

Reply via email to