Combined grammar changes for binary literals and underscores in literals

Joe Darcy Joe.Darcy at Sun.COM
Tue Jul 21 13:02:33 PDT 2009


Hello.

It has been pointed out to me off-list that the grammar as written below 
would disallow two-digit numbers, which is not desired.  This problem is 
corrected by changing the productions like

    Digit DigitsAndUnderscores Digit

to be

    Digit DigitsAndUnderscores_opt Digit

-Joe

On 07/15/09 02:22 PM, Joseph D. Darcy wrote:
> Hello.
>
> Getting around to some grammatical hacking, below is a grammar I think 
> properly captures the desired changes for combining the binary 
> literals and underscores in literals proposals.  This grammar does 
> *not* include support for unsigned literals or autosizing literals.
>
> The basic approach is to redefine the FooDigits productions to be a 
> non-empty sequence of Foo digits and underscores starting and ending 
> with a Foo digit rather than just a non-empty sequence Foo digits.  
> Each FooDigits nonterminal has two rules, one for a single digit and 
> one for two or more digits.  The rules for two or more digits force a 
> true digit, rather than an underscore, as the first and last character.
>
> Changing the FooDigits definitions allows underscores in both integer 
> and floating-point literals.  In more detail:
>
> * Replace the productions Digits, HexDigits, OctalDigits, and  in 
> JLSv3 3.10.1 as shown below
> * Add productions for BinaryDigits
> * Add rules for FooDigitsAndUnderscores and FooDigitOrUnderscore
> * Add productions to DecimalNumeral and OctalNumeral:
> * Add a rule for Underscores
>
> IntegerLiteral:
>        DecimalIntegerLiteral
>        HexIntegerLiteral
>        OctalIntegerLiteral
>        BinaryIntegerLiteral         // New
>
> BinaryIntegerLiteral:
>        BinaryNumeral IntegerTypeSuffix_opt
>
> BinaryNumeral:
>        0 b BinaryDigits
>        0 B BinaryDigits
>
>
> DecimalNumeral
>   0
>   NonZeroDigit Digits_opt
>   NonZeroDigit Underscores Digits // New
>
> Underscores
>    _
>    Underscores _
>
> Digits:
>    Digit
>    Digit DigitsAndUnderscores Digit
>
> DigitsAndUnderscores:
>    DigitOrUnderscore
>    DigitsAndUnderscores DigitOrUnderscore
>
> DigitOrUnderscore
>    Digit
>    _
>
>
> HexDigits:
>    HexDigit
>    HexDigit HexDigitsAndUnderscores HexDigit
>
> HexDigitsAndUnderscores:
>    HexDigitOrUnderscore
>    HexDigitsAndUnderscores HexDigitOrUnderscore
>
> HexDigitOrUnderscore
>    HexDigit
>    _
>
> OctalNumeral:
>    0 OctalDigits
>    0 Underscores OctalDigits // New
>
> OctalDigits:
>    OctalDigit
>    OctalDigit OctalDigitsAndUnderscores OctalDigit
>
> OctalDigitsAndUnderscores:
>    OctalDigitOrUnderscore
>    OctalDigitsAndUnderscores OctalDigitOrUnderscore
>
> OctalDigitOrUnderscore
>    OctalDigit
>    _
>
> BinaryDigits:
>    BinaryDigit
>    BinaryDigit BinaryDigitsAndUnderscores BinaryDigit
>
> BinaryDigitsAndUnderscores:
>    BinaryDigitOrUnderscore
>    BinaryDigitsAndUnderscores BinaryDigitOrUnderscore
>
> BinaryDigitOrUnderscore
>    BinaryDigit
>    _
>
> BinaryDigit: one of
>        0 1
>
> -Joe




More information about the coin-dev mailing list