Modula-2 Reloaded

A Modern Typesafe & Literate Programming Notation

Site Menu

Project

Specification

Implementation

Recommendations

Reference

Needs Updating

Work in Progress

Wastebasket

Wiki Manual

edit SideBar

Output Formats For Numeric Types Representing Integer Numbers

WiP.OutputFormatsForNumericTypesRepresentingIntegerNumbers History

Hide minor edits - Show changes to output

2010-01-31 06:21 by benjk -
Changed lines 80-87 from:
   sign? fillChar* ( fixedFmtDecimal | expFmtDecimal ) suffix? ;

fixedFmtDecimal :
    integralPart ;

expFmtDecimal :
    fixedFmtDecimal exponent ;
to:
   base16CLiteralFmt | base16M2LiteralFmt | decimalFmt ;

base16CLiteralFmt :
    '0' 'x' ( decimalDigit | 'a' .. 'f' )+ ;

base16M2LiteralFmt :
    '0' ( decimalDigit | 'A' .. 'F' )+ 'H' ;

decimalFmt :
    sign? fillChar* integralPart suffix?
;
Deleted lines 101-109:

engIntegralPart :
    ( ( ( decimalDigit digitSeparator? )? decimalDigit )? decimalDigit )? decimalDigit ;

exponent :
    'E' '+' decimalDigit decimalDigit+ ;

engExponent :
    exponent ;
2010-01-29 15:58 by benjk -
Changed line 59 from:
!!!!!Integerl Number Notation
to:
!!!!!Integer Number Notation
Changed line 104 from:
   'E' ( '+' | '-' ) decimalDigit decimalDigit+ ;
to:
   'E' '+' decimalDigit decimalDigit+ ;
2010-01-29 12:49 by benjk -
Changed lines 83-84 from:
   integralPart ( decimalPoint | decimalComma ) fractionalPart ;
to:
   integralPart ;
Deleted lines 102-104:
fractionalPart :
    ( decimalDigit ( decimalDigit ( decimalDigit digitSeparator )? )? )* decimalDigit ;

Changed lines 110-117 from:
   decimalPointModeDigitSeparator | decimalCommaModeDigitSeparator ;

decimalPointModeDigitSeparator :
    whitespace | ',' ;

decimalCommaModeDigitSeparator :
    whitespace
| '.' ;
to:
   whitespace | ',' | '.' ;
Deleted lines 114-119:
decimalPoint :
    '.' ;

decimalComma :
    ',' ;

Deleted lines 130-131:
* in decimal point mode, @@decimalPoint@@ is shown instead of @@decimalComma@@ and @@decimalPointModeDigitSeparator@@ is shown instead of @@decimalCommaModeDigitSeparator@@.
* in decimal comma mode, @@decimalComma@@ is shown instead of @@decimalPoint@@ and @@decimalCommaModeDigitSeparator@@ is shown instead of @@decimalPointModeDigitSeparator@@.
2010-01-28 17:08 by benjk -
Added lines 1-147:
!!!Types
@@INTEGER@@, @@LONGINT@@

!!!Syntax
The EBNF for the textual representation of values of types that represent integer numbers is

!!!!!Values and Value Lists
[@
intNumberValue :
    intNumberNotation ;

intNumberValueList :
    intNumberValue ( listSeparator intNumberValue )* ;

listSeparator :
    defaultListSeparator | userDefinedListSeparator | newline ;

defaultListSeparator :
    defaultListSeparatorForValuesWithCommas |
    defaultListSeparatorForValuesWithoutCommas ;

defaultListSeparatorForValuesWithCommas :
    ';' whitespace ;

defaultListSeparatorForValuesWithoutCommas :
    ',' whitespace ;

userDefinedListSeparator :
    character whitespace? ;
@]

!!!!!Arrays and Array Lists
[@
intNumberArray :
    openingArrayDelimiter intNumberValueList closingArrayDelimiter ;

intNumberArrayList :
    intNumberArray ( listSeparator intNumberArray )* ;

openingArrayDelimiter :
    ( defaultOpeningArrayDelimiter | userDefinedOpeningArrayDelimiter ) whitespace ;

closingArrayDelimiter :
    whitespace ( defaultClosingArrayDelimiter | userDefinedOpeningArrayDelimiter ) ;

defaultOpeningArrayDelimiter :
    '{' ;

defaultClosingArrayDelimiter :
    '}' ;

userDefinedOpeningArrayDelimiter :
    '(' | '[' ;

userDefinedClosingArrayDelimiter :
    ')' | ']' ;
@]

!!!!!Integerl Number Notation
[@
intNumberNotation :
    unpaddedIntNumberValue | leftPaddedIntNumberValue | rightPaddedIntNumberValue ;

leftPaddedIntNumberValue :
    whitespace+ unpaddedIntNumberValue ;

rightPaddedIntNumberValue :
    unpaddedIntNumberValue whitespace+ ;

whitespace :
    ' ' ;

unpaddedIntNumberValue :
    simpleFormat | otherFormats ;

simpleFormat :
    negativeSign? decimalDigit+ ;

otherFormats :
    sign? fillChar* ( fixedFmtDecimal | expFmtDecimal ) suffix? ;

fixedFmtDecimal :
    integralPart ( decimalPoint | decimalComma ) fractionalPart ;

expFmtDecimal :
    fixedFmtDecimal exponent ;

sign :
    whitespace | '+' | '-' ;

negativeSign :
    '-' ;

fillChar :
    whitespace | '*' | '0' ;

integralPart :
    decimalDigit decimalDigit? decimalDigit? ( digitSeparator? digitGroup )* ;

engIntegralPart :
    ( ( ( decimalDigit digitSeparator? )? decimalDigit )? decimalDigit )? decimalDigit ;

fractionalPart :
    ( decimalDigit ( decimalDigit ( decimalDigit digitSeparator )? )? )* decimalDigit ;

exponent :
    'E' ( '+' | '-' ) decimalDigit decimalDigit+ ;

engExponent :
    exponent ;

digitSeparator :
    decimalPointModeDigitSeparator | decimalCommaModeDigitSeparator ;

decimalPointModeDigitSeparator :
    whitespace | ',' ;

decimalCommaModeDigitSeparator :
    whitespace | '.' ;

digitGroup :
    decimalDigit decimalDigit decimalDigit ;

decimalPoint :
    '.' ;

decimalComma :
    ',' ;

decimalDigit  :
    '0' .. '9' ;

suffix :
    character* ;

character :
    <any printable ASCII character> ;

newline :
    <runtime host dependent ASCII control sequence for new line> ;
@]

!!!Static Semantics
* all values in a list are shown in the same notation.
* all values in a list are shown with identical formatting.
* in decimal point mode, @@decimalPoint@@ is shown instead of @@decimalComma@@ and @@decimalPointModeDigitSeparator@@ is shown instead of @@decimalCommaModeDigitSeparator@@.
* in decimal comma mode, @@decimalComma@@ is shown instead of @@decimalPoint@@ and @@decimalCommaModeDigitSeparator@@ is shown instead of @@decimalPointModeDigitSeparator@@.