From Modula-2 Reloaded

WiP: Output Formats For Numeric Types Representing Real Numbers

Types

REAL, LONGREAL, BCD, LONGBCD

Syntax

The EBNF for the textual representation of values of types that represent real numbers is

Values and Value Lists
realNumberValue :
    realNumberNotation ;

realNumberValueList :
    realNumberValue ( listSeparator realNumberValue )* ;

listSeparator :
    defaultListSeparator | userDefinedListSeparator | newline ;

defaultListSeparator :
    defaultListSeparatorForValuesWithCommas |
    defaultListSeparatorForValuesWithoutCommas ;

defaultListSeparatorForValuesWithCommas :
    ';' whitespace ;

defaultListSeparatorForValuesWithoutCommas :
    ',' whitespace ;

userDefinedListSeparator :
    character whitespace? ;
Arrays and Array Lists
realNumberArray :
     openingArrayDelimiter realNumberValueList closingArrayDelimiter ;

realNumberArrayList :
    realNumberArray ( listSeparator realNumberArray )* ;

openingArrayDelimiter :
    ( defaultOpeningArrayDelimiter | userDefinedOpeningArrayDelimiter ) whitespace ;

closingArrayDelimiter :
    whitespace ( defaultClosingArrayDelimiter | userDefinedOpeningArrayDelimiter ) ;

defaultOpeningArrayDelimiter :
    '{' ;

defaultClosingArrayDelimiter :
    '}' ;

userDefinedOpeningArrayDelimiter :
    '(' | '[' ;

userDefinedClosingArrayDelimiter :
    ')' | ']' ;
Real Number Notation
realNumberNotation :
    unpaddedRealNumberValue | leftPaddedRealNumberValue | rightPaddedRealNumberValue ;

leftPaddedRealNumberValue :
    whitespace+ unpaddedRealNumberValue ;

rightPaddedRealNumberValue :
    unpaddedRealNumberValue whitespace+ ;

whitespace :
    ' ' ;

unpaddedRealNumberValue :
    simpleFormat | otherFormats ;

simpleFormat :
    negativeSign? decimalDigit decimalPoint decimalDigit+ exponent ;

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

fixedFmtDecimal :
    integralPart ( decimalPoint | decimalComma ) fractionalPart ;

engFmtDecimal :
    engIntegralPart ( decimalPoint | decimalComma ) fractionalPart engExponent ;

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

Retrieved from http://modula-2.net/m2r10/pmwiki.php?n=WiP.OutputFormatsForNumericTypesRepresentingRealNumbers
Page last modified on 2010-01-28 13:41