%%% %% 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]