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.