1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
%%%
%% Section 3.10.2: Floating Point Literals
%%
%% @author Martin Bravenboer <martin@cs.uu.nl>
%%%
module languages/java-14/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]
|