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 >> > >
