August 15, 2009
http://d.puremagic.com/issues/show_bug.cgi?id=3251

           Summary: DecimalFloat literal cannot begin with "08" or "09"
           Product: D
           Version: 1.046
          Platform: x86
               URL: http://www.digitalmars.com/d/1.0/lex.html
        OS/Version: Windows
            Status: NEW
          Keywords: rejects-valid
          Severity: minor
          Priority: P2
         Component: DMD
        AssignedTo: nobody@puremagic.com
        ReportedBy: smjg@iname.com


DecimalFloat:
    DecimalDigits .
    DecimalDigits . DecimalDigits
    DecimalDigits . DecimalDigits DecimalExponent
    . Decimal
    . Decimal DecimalExponent
    DecimalDigits DecimalExponent

DecimalDigits:
    DecimalDigit
    DecimalDigit DecimalDigits

DecimalDigit:
    0
    NonZeroDigit
    _

Going by this, floating point literals are the same whether they begin with a 0 or not, unlike integer literals.  Code that illustrates this fact:

----------
pragma(msg, (76).stringof);
pragma(msg, (076).stringof);
pragma(msg, (76.).stringof);
pragma(msg, (076.).stringof);
pragma(msg, (76.543).stringof);
pragma(msg, (076.543).stringof);
pragma(msg, (678.).stringof);
pragma(msg, (0678.).stringof);
pragma(msg, (876.543).stringof);
//pragma(msg, (0876.543).stringof);
----------
76
62
76
76
76.543
76.543
678
678
876.543
----------

However, if the final, commented-out line is reinstated, I get errors:

----------
float_literal.d(10): found '876.543' when expecting ')'
float_literal.d(10): no identifier for declarator .stringof
float_literal.d(10): semicolon expected, not ')'
float_literal.d(10): Declaration expected, not ')'
----------

Presumably, DMD sees the '0' and begins trying to lex it as an Octal, but fails to recover properly when it stumbles upon the '8'.  But it's strange that other similar forms compile successfully, such as the aforementioned "0678.", "008." and "0_9.".

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------