Because this is a public maiiling-list :) Stef
On Aug 11, 2011, at 11:12 PM, Frank Shearar wrote: > Hi Stef, > > I'm reporting a bug in PetitSmalltalk, so why don't we concentrate on that? > > frank > > On 11 August 2011 21:56, Stéphane Ducasse <[email protected]> wrote: >> frank >> just to be clear, we do not like the GNU syntax for Coral, else we >> would have done it before. >> See my reply to your question in the coral mailing-lits >> >> I think that >> Eval [] >> Class [] >> Import [] >> >> >> but I do not want nested definition nor class extension or class definition >> as in GNU. So if you want a GNU syntax >> then make sure that it is optional and that we can get coral without it. >> >> Stef >> >> On Aug 11, 2011, at 10:48 PM, Frank Shearar wrote: >> >>> I'm extending Coral to support Gnu Smalltalk syntax, and ran into >>> something strange. >>> >>> I asked Lukas and he said that since others would be interested, I >>> should repost the question here. So: >>> >>> Gnu Smalltalk's class variable declarations take the form of >>> [<identifier> := <expression>.]* at the end of an object definition. >>> To that end I wrote a #classVars production like so: >>> >>> classVars >>> ^ (assignment , expression , $. asParser) star >>> "Possibly I need to support the lack of a dot on the last >>> expression. Not relevant at the moment" >>> >>> This didn't work as expected. Looking further, I found this oddity: >>> >>> p := PPSmalltalkParser new. >>> p number end parse: '1.' "=> #(#(nil #($1) nil) 1.0)" >>> >>> I would expect this to fail, because "1." isn't a number (but see below). >>> >>> Indeed, ripping out the parser of #number: >>> >>> n := ($- asParser optional , #digit asParser plus , ($. asParser , >>> #digit asParser plus) optional) end. >>> n parse: '1.' "=> end of input expected at 1" >>> >>> So I experimented a bit, and it seems like#number is being overly >>> eager in consuming that $. character, and Number >> #readFrom:'s >>> reading '1.': >>> >>> Number readFrom: '1.' readStream "=> 1.0" >>> >>> p := PPSmalltalkParser new. >>> p number end parse: '1' "=> #(#(nil #($1) nil) 1)" >>> >>> p := PPSmalltalkParser new. >>> p number end parse: '1.0' "=> #(#(nil #($1) #($. #($0))) 1.0)" >>> >>> p := PPSmalltalkParser new. >>> p number end parse: '1. ' "=> end of input expected at 2" >>> >>> Or am I being silly? >>> >>> frank >>> >> >> >
