http://www.digitalmars.com/d/1.0/lex.html http://www.digitalmars.com/d/2.0/lex.html Under "Floating Literals", the spec says: DecimalFloat -> DecimalDigits DecimalFloat -> DecimalDigits . DecimalDigits DecimalFloat -> . DecimalDigits etc DecimalDigits is defined as: DecimalDigits -> DecimalDigit DecimalDigits -> DecimalDigit DecimalDigits DecimalDigit -> [0123456789_] From this, we can derive: DecimalFloat -> DecimalDigits . DecimalDigits -> DecimalDigit . DecimalDigit -> _ . _ To resolve the ambiguity, _ cannot be allowed as the first character in a float, and it cannot be allowed as the first character after the decimal point.
It appears DMD 2.026 already works as you suggest; _1.0 is not recognized as a valid float. However, 1_._1 is, which doesn't seem ambiguous to me. Once you're after the . and in a FloatLiteral, any characters in [_0-9] should be eaten to finish the float literal. The spec just needs to be corrected with a new rule that defines 0, NonZeroDigit, and then a repeating of those with DecimalDigits (Decimal is almost fine except its handling of octals.) -[Unknown]
http://www.dsource.org/projects/phobos/changeset/2150
AltStyle によって変換されたページ (->オリジナル) / アドレス: モード: デフォルト 音声ブラウザ ルビ付き 配色反転 文字拡大 モバイル