tonisuter
(Toni Suter)
1
Hi,
I have a question regarding hexadecimal floating-point literals. According to the Lexical Structure (Lexical Structure — The Swift Programming Language (Swift 5.7))
it is not possible to have a hex floating-point literal without the exponent. At first I thought this makes sense.
How else would the lexer / parser know if 0x123.beef is a hex floating-point literal or a hex integer literal with a property 'beef'?
However, if I define such a property on Int, it doesn’t work:
extension Int {
var beef: Int {
return 42
}
}
print(12.beef) // works
print(0b1001.beef) // works
print(0o77.beef) // works
print(0xabc.beef) // error: hexadecimal floating point literal must end with an exponent
Is this just to avoid confusion for the programmer? Or is there some other reason?
Thanks and best regards,
Toni
Zhao_Xin
(Zhao Xin)
2
I think it avoids the confusion. You can use print((0xabc).beef) instead.
Zhaoxin
···
On Sun, Jun 26, 2016 at 3:50 PM, Toni Suter via swift-users < swift-users@swift.org> wrote:
Hi,
I have a question regarding hexadecimal floating-point literals. According
to the Lexical Structure (
The Swift Programming Language: Redirect
)
it is not possible to have a hex floating-point literal without the
exponent. At first I thought this makes sense.
How else would the lexer / parser know if 0x123.beef is a hex
floating-point literal or a hex integer literal with a property 'beef'?
However, if I define such a property on Int, it doesn’t work:
extension Int {
var beef: Int {
return 42
}
}
print(12.beef) // works
print(0b1001.beef) // works
print(0o77.beef) // works
print(0xabc.beef) // error: hexadecimal floating point literal must end
with an exponent
Is this just to avoid confusion for the programmer? Or is there some other
reason?
Thanks and best regards,
Toni
_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users
Joe_Groff
(Joe Groff)
3
The lexer failed to backtrack if there wasn't a valid significand and exponent, but that was recently fixed, so this should work now. See [SR-1724][Lexer] Handle hex letters after '.' on hex number literal by rintaro · Pull Request #3124 · apple/swift · GitHub .
-Joe
···
On Jun 26, 2016, at 12:50 AM, Toni Suter via swift-users <swift-users@swift.org> wrote:
Hi,
I have a question regarding hexadecimal floating-point literals. According to the Lexical Structure (The Swift Programming Language: Redirect)
it is not possible to have a hex floating-point literal without the exponent. At first I thought this makes sense.
How else would the lexer / parser know if 0x123.beef is a hex floating-point literal or a hex integer literal with a property 'beef'?
However, if I define such a property on Int, it doesn’t work:
extension Int {
var beef: Int {
return 42
}
}
print(12.beef) // works
print(0b1001.beef) // works
print(0o77.beef) // works
print(0xabc.beef) // error: hexadecimal floating point literal must end with an exponent
Is this just to avoid confusion for the programmer? Or is there some other reason?