Static Semantics
type Money is delta 0.01 digits 15; for Money'Machine_Radix use 10;
Static Semantics
package Ada.Decimal is pragma Pure(Decimal);
Max_Scale : constant := implementation-defined; Min_Scale : constant := implementation-defined;
Min_Delta : constant := 10.0**(-Max_Scale); Max_Delta : constant := 10.0**(-Min_Scale);
Max_Decimal_Digits : constant := implementation-defined;
generic
type Dividend_Type is delta <> digits <>;
type Divisor_Type is delta <> digits <>;
type Quotient_Type is delta <> digits <>;
type Remainder_Type is delta <> digits <>;
procedure Divide (Dividend : in Dividend_Type;
Divisor : in Divisor_Type;
Quotient : out Quotient_Type;
Remainder : out Remainder_Type);
pragma Convention(Intrinsic, Divide);
end Ada.Decimal;
Decimal Digit: '9' Radix Control: '.' 'V' Sign Control: '+' '-' '<' '>' "CR" "DB" Currency Control: '$' '#' Zero Suppression: 'Z' '*' Simple Insertion: '_' 'B' '0' '/'
Dynamic Semantics
picture_string ::= fixed_$_picture_string | fixed_#_picture_string | floating_currency_picture_string | non_currency_picture_string
fixed_$_picture_string ::=
[fixed_LHS_sign] fixed_$_char {direct_insertion}
[zero_suppression] number [RHS_sign]
| [fixed_LHS_sign {direct_insertion}] [zero_suppression]
number fixed_$_char {direct_insertion} [RHS_sign]
| floating_LHS_sign number fixed_$_char {direct_insertion}
[RHS_sign]
| [fixed_LHS_sign] fixed_$_char {direct_insertion}
all_zero_suppression_number {direct_insertion} [RHS_sign]
| [fixed_LHS_sign {direct_insertion}] all_zero_suppression_number
{direct_insertion} fixed_$_char {direct_insertion}
[RHS_sign]
| all_sign_number {direct_insertion} fixed_$_char
{direct_insertion} [RHS_sign]
fixed_#_picture_string ::=
[fixed_LHS_sign] single_#_currency {direct_insertion}
[zero_suppression] number [RHS_sign]
| [fixed_LHS_sign] multiple_#_currency {direct_insertion}
zero_suppression number [RHS_sign]
| [fixed_LHS_sign {direct_insertion}] [zero_suppression]
number fixed_#_currency {direct_insertion} [RHS_sign]
| floating_LHS_sign number fixed_#_currency {direct_insertion}
[RHS_sign]
| [fixed_LHS_sign] single_#_currency {direct_insertion}
all_zero_suppression_number {direct_insertion} [RHS_sign]
| [fixed_LHS_sign] multiple_#_currency {direct_insertion}
all_zero_suppression_number {direct_insertion} [RHS_sign]
| [fixed_LHS_sign {direct_insertion}] all_zero_suppression_number
{direct_insertion} fixed_#_currency {direct_insertion}
[RHS_sign]
| all_sign_number {direct_insertion} fixed_#_currency
{direct_insertion} [RHS_sign]
floating_currency_picture_string ::=
[fixed_LHS_sign] {direct_insertion} floating_$_currency
number [RHS_sign]
| [fixed_LHS_sign] {direct_insertion} floating_#_currency
number [RHS_sign]
| [fixed_LHS_sign] {direct_insertion} all_currency_number
{direct_insertion} [RHS_sign]
non_currency_picture_string ::=
[fixed_LHS_sign {direct_insertion}] zero_suppression
number [RHS_sign]
| [floating_LHS_sign]
number [RHS_sign]
| [fixed_LHS_sign {direct_insertion}]
all_zero_suppression_number {direct_insertion} [RHS_sign]
| all_sign_number {direct_insertion}
| fixed_LHS_sign direct_insertion {direct_insertion}
number [RHS_sign]
fixed_LHS_sign ::= LHS_Sign
LHS_Sign ::= + | - | <
fixed_$_char ::= $
direct_insertion ::= simple_insertion
simple_insertion ::= _ | B | 0 | /
zero_suppression ::= Z {Z
| context_sensitive_insertion}
| fill_string
context_sensitive_insertion ::= simple_insertion
fill_string ::= * {* | context_sensitive_insertion}
number ::=
fore_digits [radix [aft_digits] {direct_insertion}]
| radix aft_digits {direct_insertion}
fore_digits ::= 9 {9 | direct_insertion}
aft_digits ::= {9 | direct_insertion} 9
radix ::= . | V
RHS_sign ::= + | - | > | CR | DB
floating_LHS_sign ::=
LHS_Sign {context_sensitive_insertion} LHS_Sign
{LHS_Sign | context_sensitive_insertion}
single_#_currency ::= #
multiple_#_currency ::= ## {#}
fixed_#_currency ::= single_#_currency | multiple_#_currency
floating_$_currency ::=
$ {context_sensitive_insertion} $ {$
| context_sensitive_insertion}
floating_#_currency ::=
# {context_sensitive_insertion} # {#
| context_sensitive_insertion}
all_sign_number ::= all_sign_fore [radix [all_sign_aft]] [>]
all_sign_fore ::=
sign_char {context_sensitive_insertion} sign_char {sign_char
| context_sensitive_insertion}
all_sign_aft ::= {all_sign_aft_char} sign_char
all_sign_aft_char ::= sign_char | context_sensitive_insertion
sign_char ::= + | - | <
all_currency_number ::= all_currency_fore [radix [all_currency_aft]]
all_currency_fore ::=
currency_char {context_sensitive_insertion}
currency_char {currency_char | context_sensitive_insertion}
all_currency_aft ::= {all_currency_aft_char} currency_char
all_currency_aft_char ::= currency_char
| context_sensitive_insertion
currency_char ::= $ | #
all_zero_suppression_number ::= all_zero_suppression_fore [ radix [all_zero_suppression_aft]]
all_zero_suppression_fore ::=
zero_suppression_char {zero_suppression_char
| context_sensitive_insertion}
all_zero_suppression_aft ::= {all_zero_suppression_aft_char}
zero_suppression_char
all_zero_suppression_aft_char ::= zero_suppression_char
| context_sensitive_insertion
zero_suppression_char ::= Z | *
char & '(' & spaces & count_string & ')'
Dynamic Semantics
Let the magnitude of Item be expressed as a base-10 number I ***I .F ***F , called the displayed magnitude of Item, where: p 1 1 q
I /= 0 if p>0. p
+---------------------------------------------------+
| |
| Table F-1: Edited Output for Sign Control Symbols |
| |
+----------------+------------------+---------------+
| | | |
| Sign Control | Edited Output | Edited Output |
| Symbol | for Non-Negative | for Negative |
| | Number | Number |
| | | |
+----------------+------------------+---------------+
| | | |
| '+' | '+' | '-' |
| | | |
| '-' | 'b' | '-' |
| | | |
| '<' | 'b' | '(' |
| | | |
| '>' | 'b' | ')' |
| | | |
| "CR" | "bb" | "CR" |
| | | |
| "DB" | "bb" | "DB" |
| | | |
+----------------+------------------+---------------+
Occurrences of '9' in fore_digits of number are replaced
from right to left with the decimal digit character values
for I , ..., I , respectively.
1 p
Occurrences of '9' in aft_digits of number are replaced
from left to right with the decimal digit character values
for F , ... F .
1 q
Examples
Item: Picture and Result Strings:
123456.78 Picture: "-###**_***_**9.99"
"bbb$***123,456.78"
"bbFF***123.456,78" (currency = "FF",
separator = '.',
radix mark = ',')
123456.78 Picture: "-$$$**_***_**9.99"
Result: "bbb$***123,456.78"
"bbbFF***123.456,78" (currency = "FF",
separator = '.',
radix mark = ',')
0.0 Picture: "-$$$$$$.$$"
Result: "bbbbbbbbbb"
0.20 Picture: "-$$$$$$.$$"
Result: "bbbbbb$.20"
-1234.565 Picture: "<<<<_<<<.<<###>"
Result: "bb(1,234.57DMb)" (currency = "DM")
12345.67 Picture: "###_###_##9.99"
Result: "bbCHF12,345.67" (currency = "CHF")
package Ada.Text_IO.Editing is
type Picture is private;
function Valid (Pic_String : in String;
Blank_When_Zero : in Boolean := False)
return Boolean;
function To_Picture (Pic_String : in String;
Blank_When_Zero : in Boolean := False)
return Picture;
function Pic_String (Pic : in Picture) return String; function Blank_When_Zero (Pic : in Picture) return Boolean;
Max_Picture_Length : constant := implementation_defined;
Picture_Error : exception;
Default_Currency : constant String := "$"; Default_Fill : constant Character := '*'; Default_Separator : constant Character := ','; Default_Radix_Mark : constant Character := '.';
generic
type Num is delta <> digits <>;
Default_Currency : in String
:= Text_IO.Editing.Default_Currency;
Default_Fill : in Character
:= Text_IO.Editing.Default_Fill;
Default_Separator : in Character
:= Text_IO.Editing.Default_Separator;
Default_Radix_Mark : in Character
:= Text_IO.Editing.Default_Radix_Mark;
package Decimal_Output is
function Length (Pic : in Picture;
Currency : in String := Default_Currency)
return Natural;
function Valid (Item : in Num;
Pic : in Picture;
Currency : in String := Default_Currency)
return Boolean;
function Image
(Item : in Num;
Pic : in Picture;
Currency : in String := Default_Currency;
Fill : in Character := Default_Fill;
Separator : in Character := Default_Separator;
Radix_Mark : in Character := Default_Radix_Mark)
return String;
procedure Put
(File : in File_Type;
Item : in Num;
Pic : in Picture;
Currency : in String := Default_Currency;
Fill : in Character := Default_Fill;
Separator : in Character := Default_Separator;
Radix_Mark : in Character := Default_Radix_Mark);
procedure Put
(Item : in Num;
Pic : in Picture;
Currency : in String := Default_Currency;
Fill : in Character := Default_Fill;
Separator : in Character := Default_Separator;
Radix_Mark : in Character := Default_Radix_Mark);
procedure Put
(To : out String;
Item : in Num;
Pic : in Picture;
Currency : in String := Default_Currency;
Fill : in Character := Default_Fill;
Separator : in Character := Default_Separator;
Radix_Mark : in Character := Default_Radix_Mark);
end Decimal_Output;
private
... -- not specified by the language
end Ada.Text_IO.Editing;
function Valid (Pic_String : in String;
Blank_When_Zero : in Boolean := False)
return Boolean;
function To_Picture (Pic_String : in String;
Blank_When_Zero : in Boolean := False)
return Picture;
function Pic_String (Pic : in Picture) return String; function Blank_When_Zero (Pic : in Picture) return Boolean;
function Length (Pic : in Picture;
Currency : in String := Default_Currency)
return Natural;
function Valid (Item : in Num;
Pic : in Picture;
Currency : in String := Default_Currency)
return Boolean;
function Image (Item : in Num;
Pic : in Picture;
Currency : in String := Default_Currency;
Fill : in Character := Default_Fill;
Separator : in Character := Default_Separator;
Radix_Mark : in Character := Default_Radix_Mark)
return String;
procedure Put (File : in File_Type;
Item : in Num;
Pic : in Picture;
Currency : in String := Default_Currency;
Fill : in Character := Default_Fill;
Separator : in Character := Default_Separator;
Radix_Mark : in Character := Default_Radix_Mark);
procedure Put (Item : in Num;
Pic : in Picture;
Currency : in String := Default_Currency;
Fill : in Character := Default_Fill;
Separator : in Character := Default_Separator;
Radix_Mark : in Character := Default_Radix_Mark);
procedure Put (To : out String;
Item : in Num;
Pic : in Picture;
Currency : in String := Default_Currency;
Fill : in Character := Default_Fill;
Separator : in Character := Default_Separator;
Radix_Mark : in Character := Default_Radix_Mark);
Implementation Requirements
Static Semantics
Go to the first, previous, next, last section, table of contents.