%%%
%% Section 3.10.2: Floating Point Literals
%%
%% @author Martin Bravenboer <martin.bravenboer@gmail.com>
%%%
module languages/java-15/lexical/literals/FloatingPointLiterals
exports
sorts
FloatLiteral
DeciFloatLiteral
HexaFloatLiteral
context-free syntax
DeciFloatLiteral -> FloatLiteral {cons("Float")}
HexaFloatLiteral -> FloatLiteral {cons("Float")}
lexical syntax
DeciFloatNumeral [fFdD]? -> DeciFloatLiteral
HexaFloatNumeral [fFdD]? -> HexaFloatLiteral
%% Reject plain integer literals as decimal float literals.
%% A similar rejection for hexadecimal float literals is not
%% required, since these always contain an exponent part.
[0-9]+ -> DeciFloatLiteral {reject}
lexical restrictions
DeciFloatLiteral -/- [fFdD]
HexaFloatLiteral -/- [fFdD]
%%%
%% Decimal Floating Point Numerals
%%%
sorts
DeciFloatNumeral
DeciFloatDigits
DeciFloatExponentPart
lexical syntax
DeciFloatDigits DeciFloatExponentPart? -> DeciFloatNumeral
[0-9]* "." [0-9]* -> DeciFloatDigits
"." -> DeciFloatDigits {reject}
[0-9]+ -> DeciFloatDigits
[eE] SignedInteger -> DeciFloatExponentPart
[\+\-]? [0-9]+ -> SignedInteger
lexical restrictions
DeciFloatDigits -/- [0-9]
DeciFloatExponentPart -/- [0-9]
%%%
%% Hexadecimal Floating Point Literals
%%%
sorts
HexaFloatNumeral
HexaSignificand
BinaryExponent
SignedInteger
lexical syntax
HexaSignificand BinaryExponent -> HexaFloatNumeral
[0][xX] [0-9a-fA-F]+ -> HexaSignificand
[0][xX] [0-9a-fA-F]* "." [0-9a-fA-F]* -> HexaSignificand
[0][xX] "." -> HexaSignificand {reject}
[pP] SignedInteger -> BinaryExponent
lexical restrictions
HexaSignificand -/- [0-9a-fA-F]
SignedInteger -/- [0-9]