Sorry, I forgot to answer. This change is indeed really nice.

Thank you for it!

Cheers,

Julien

---
Julien Delplanque
Doctorant à l’Université de Lille
http://juliendelplanque.be/phd.html
Equipe Rmod, Inria
Bâtiment B 40, Avenue Halley 59650 Villeneuve d'Ascq
Numéro de téléphone: +333 59 35 86 40

> Le 9 oct. 2018 à 21:22, Sven Van Caekenberghe <[email protected]> a écrit :
> 
> I decided to add it for real:
> 
> https://github.com/svenvc/ston/commit/9c83e3cc2f00cab83e57f2e10a139d6ecef3cb30
> 
> add support for Fraction and ScaledDecimal as direct numeric literals (in 
> STON mode, not in JSON mode) with units tests
> 
>> On 25 Sep 2018, at 14:13, Sven Van Caekenberghe <[email protected]> wrote:
>> 
>> 
>> 
>>> On 18 Sep 2018, at 16:45, Sven Van Caekenberghe <[email protected]> wrote:
>>> 
>>> Of course, we could also extend the basic number parser and allow the 
>>> native (stored) notation
>>> 
>>> 1/3
>>> 3/2s2
>>> 
>>> Note how that last one should use the more exact #storeOn: notation, not 
>>> the #printOn: 
>>> 
>>> I'll have to think about this a bit more, as I can really not choose right 
>>> now.
>> 
>> I am still not sure if we should do this or not, but here is a POC 
>> implementation of the above.
>> 
>> It implements the following syntax extension (see the class comment of STON 
>> for the rest).
>> 
>> number
>> int
>> int denominator
>> int denominator scale
>> int frac
>> int exp
>> int frac exp
>> 
>> denominator
>> / digits
>> 
>> scale
>> s digits
>> 
>> 
>> STONWriter>>#writeFraction: fraction
>>      jsonMode
>>              ifTrue: [ self writeFloat: fraction asFloat ] 
>>              ifFalse: [
>>                      writeStream
>>                              print: fraction numerator;
>>                              nextPut: $/;
>>                              print: fraction denominator ]
>> 
>> STONWriter>>#writeScaledDecimal: scaledDecimal
>>      jsonMode
>>              ifTrue: [ self writeFloat: scaledDecimal asFloat ]
>>              ifFalse: [ 
>>                      writeStream
>>                              print: scaledDecimal numerator;
>>                              nextPut: $/;
>>                              print: scaledDecimal denominator;
>>                              nextPut: $s;
>>                              print: scaledDecimal scale ]
>> 
>> Fraction>>#stonOn: stonWriter
>>      stonWriter writeFraction: self
>> 
>> ScaledDecimal>>#stonOn: stonWriter
>>      stonWriter writeScaledDecimal: self
>> 
>> STONReader>>parseNumber
>>      | negated number |
>>      negated := readStream peekFor: $-.
>>      number := self parseNumberInteger.
>>      (readStream peekFor: $/)
>>              ifTrue: [ 
>>                      number := Fraction numerator: number denominator: self 
>> parseNumberInteger.
>>                      (readStream peekFor: $s)
>>                              ifTrue: [ number := ScaledDecimal 
>> newFromNumber: number scale: self parseNumberInteger ] ]
>>              ifFalse: [ 
>>                      (readStream peekFor: $.)
>>                              ifTrue: [ number := number + self 
>> parseNumberFraction ].
>>                      ((readStream peekFor: $e) or: [ readStream peekFor: $E 
>> ])
>>                              ifTrue: [ number := number * self 
>> parseNumberExponent ] ].
>>      negated
>>              ifTrue: [ number := number negated ].
>>      self consumeWhitespace.
>>      ^ number
>> 
>> Sven
>> 
> 
> 

Reply via email to