From: Matthieu Riou Date: 2007-02-20T13:27:33+09:00 Subject: Re: [YAML] To quote or not to quote (I think it's a bug) ------=_Part_35406_3474792.1171945646635 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Hi Tim, In that page: "Any "*_*" characters in the number are ignored, allowing a readable representation of large values." So clearly they're allowed, in 1.2_3 the underscore is simply ignored and the parser should undestand 1.23. If I fancy to write my own YAML by hand and make it easily readable (which is kind of the original purpose) I could write 100_000_000.03 which would be a nice looking float. Hence the ambiguity with "1.2_3". Cheers, Matthieu On 2/19/07, Tim Pease wrote: > > On 2/19/07, Matthieu Riou wrote: > > Hi, > > > > I'm not sure this is the right place to report issues about Syck but > that's > > the best I've found so far :) I think I've found a problem with the way > Syck > > quotes strings that could look like floats. Here is a short example: > > > > irb(main):001:0> require 'yaml' > > => true > > irb(main):002:0> YAML.dump(["1.2", "1.2.3", "1.2_3"]) > > => "--- \n- \"1.2\"\n- 1.2.3\n- 1.2_3\n" > > > > The first element is quoted appropriately, the second isn't because > there's > > no ambiguity but the third should be quoted. The YAML float can have > > underscores, they're used as visual separators and should be ignored by > the > > parser. So when seeing 1.2_3 the parser should read the float 1.23. Then > to > > disambiguates the string "1.2_3" should be quoted. > > > > Practically this isn't really a problem as YAML converts on writes so > > YAML.dump(1.2_3) gets directly written as 1.23. However it creates some > > interoperability issues when "1.2_3" gest written unquoted by Syck and > then > > read by another parser as being 1.23. The string isn't a string anymore > in > > that case. > > > > Are you certain that 1.2_3 is a valid YAML float? > > http://yaml.org/type/float.html > > I do not believe underscores are valid in either YAML floats or YAML > integers. Although they are allowed in Ruby, I believe Syck is > handling your example case properly and without ambiguity. > > Blessings, > TwP > > ------=_Part_35406_3474792.1171945646635--