File: AA-4-2.html

package info (click to toggle)
ada-reference-manual 20021112web-3
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k, lenny, sarge
  • size: 18,652 kB
  • ctags: 8,921
  • sloc: makefile: 52; sh: 20
file content (211 lines) | stat: -rw-r--r-- 15,809 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
    <TITLE>AARM95 - Literals</TITLE>
    <META NAME="Author" CONTENT="JTC1/SC22/WG9/ARG, by Randall Brukardt, ARG Editor">
    <META NAME="GENERATOR" CONTENT="Arm_Form.Exe, Ada Reference Manual generator">
    <STYLE type="text/css">
    DIV.paranum {position: absolute; font-family: Arial, Helvetica, sans-serif; left: 0.5 em; top: auto}
    TT {font-family: "Courier New", monospace}
    DT {display: compact}
    DIV.Normal {font-family: "Times New Roman", Times, serif; margin-bottom: 0.6em}
    DIV.Wide {font-family: "Times New Roman", Times, serif; margin-top: 0.6em; margin-bottom: 0.6em}
    DIV.Annotations {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-bottom: 0.6em}
    DIV.WideAnnotations {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-top: 0.6em; margin-bottom: 0.6em}
    DIV.Index {font-family: "Times New Roman", Times, serif}
    DIV.SyntaxSummary {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-bottom: 0.4em}
    DIV.Notes {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-bottom: 0.6em}
    DIV.NotesHeader {font-family: "Times New Roman", Times, serif; margin-left: 2.0em}
    DIV.SyntaxIndented {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-bottom: 0.4em}
    DIV.Indented {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-bottom: 0.6em}
    DIV.CodeIndented {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-bottom: 0.6em}
    DIV.SmallIndented {font-family: "Times New Roman", Times, serif; margin-left:  10.0em; margin-bottom: 0.6em}
    DIV.SmallCodeIndented {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-bottom: 0.6em}
    DIV.Examples {font-family: "Courier New", monospace; margin-left: 2.0em; margin-bottom: 0.6em}
    DIV.SmallExamples {font-family: "Courier New", monospace; font-size: 80%; margin-left: 7.5em; margin-bottom: 0.6em}
    DIV.IndentedExamples {font-family: "Courier New", monospace; margin-left: 8.0em; margin-bottom: 0.6em}
    DIV.SmallIndentedExamples {font-family: "Courier New", monospace; font-size: 80%; margin-left:  15.0em; margin-bottom: 0.6em}
    UL.Bulleted {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-right: 2.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.SmallBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.NestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.SmallNestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-right: 8.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.IndentedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-right: 8.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.CodeIndentedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.CodeIndentedNestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-right: 8.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.SyntaxIndentedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.NotesBulleted {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.NotesNestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
    DL.Hanging {font-family: "Times New Roman", Times, serif; margin-top: 0em; margin-bottom: 0.6em}
    DD.Hanging {margin-left: 6.0em}
    DL.IndentedHanging {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-top: 0em; margin-bottom: 0.6em}
    DD.IndentedHanging {margin-left: 2.0em}
    DL.HangingInBulleted {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-right: 2.0em; margin-top: 0em; margin-bottom: 0.5em}
    DD.HangingInBulleted {margin-left: 4.0em}
    DL.SmallHanging {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-top: 0em; margin-bottom: 0.6em}
    DD.SmallHanging {margin-left: 7.5em}
    DL.SmallIndentedHanging {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-top: 0em; margin-bottom: 0.6em}
    DD.SmallIndentedHanging {margin-left: 2.0em}
    DL.SmallHangingInBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
    DD.SmallHangingInBulleted {margin-left: 5.0em}
    DL.Enumerated {font-family: "Times New Roman", Times, serif; margin-right: 0.0em; margin-top: 0em; margin-bottom: 0.5em}
    DD.Enumerated {margin-left: 2.0em}
    DL.SmallEnumerated {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
    DD.SmallEnumerated {margin-left: 2.5em}
    DL.NestedEnumerated {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-right: 2.0em; margin-top: 0em; margin-bottom: 0.5em}
    DL.SmallNestedEnumerated {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
    </STYLE>
</HEAD>
<BODY TEXT="#000000" BGCOLOR="#FFFFF0" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
<P><A HREF="AA-TOC.html">Contents</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-0-29.html">Index</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-4-1-4.html">Previous</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-4-3.html">Next</A></P>
<HR>
<H1> 4.2 Literals</H1>
<DIV Class="Paranum"><FONT SIZE=-2>1</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;[<A NAME="I2338"></A> A <I>literal</I> represents
a value literally, that is, by means of notation suited to its kind.]
A literal is either a <FONT FACE="Arial, Helvetica">numeric_literal</FONT>,
a <FONT FACE="Arial, Helvetica">character_literal</FONT>, the literal
<B>null</B>, or a <FONT FACE="Arial, Helvetica">string_literal</FONT>.
<A NAME="I2339"></A></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>1.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Discussion: </B>An enumeration
literal that is an <FONT FACE="Arial, Helvetica">identifier</FONT> rather
than a <FONT FACE="Arial, Helvetica">character_literal</FONT> is not
considered a <I>literal</I> in the above sense, because it involves no
special notation ``suited to its kind.'' It might more properly be called
an <FONT FACE="Arial, Helvetica">enumeration_identifier</FONT>, except
for historical reasons. </FONT></DIV>

<H4 ALIGN=CENTER>Name Resolution Rules</H4>
<DIV Class="Paranum"><FONT SIZE=-2>2</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;<A NAME="I2340"></A>The expected type for a literal
<B>null</B> shall be a single access type. </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>2.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Discussion: </B>This new wording
(&quot;expected type ... shall be a single ... type&quot;) replaces the
old &quot;shall be determinable&quot; stuff. It reflects an attempt to
simplify and unify the description of the rules for resolving aggregates,
literals, type conversions, etc. See <A HREF="AA-8-6.html">8.6</A>, ``<A HREF="AA-8-6.html">The
Context of Overload Resolution</A>'' for the details. </FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>3</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;<A NAME="I2341"></A><A NAME="I2342"></A>For a
<FONT FACE="Arial, Helvetica">name</FONT> that consists of a <FONT FACE="Arial, Helvetica">character_literal</FONT>,
either its expected type shall be a single character type, in which case
it is interpreted as a parameterless <FONT FACE="Arial, Helvetica">function_call</FONT>
that yields the corresponding value of the character type, or its expected
profile shall correspond to a parameterless function with a character
result type, in which case it is interpreted as the name of the corresponding
parameterless function declared as part of the character type's definition
(see <A HREF="AA-3-5-1.html">3.5.1</A>). In either case, the <FONT FACE="Arial, Helvetica">character_literal</FONT>
denotes the <FONT FACE="Arial, Helvetica">enumeration_literal_specification</FONT>.
</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>3.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Discussion: </B>See <A HREF="AA-4-1-3.html">4.1.3</A>
for the resolution rules for a <FONT FACE="Arial, Helvetica">selector_name</FONT>
that is a <FONT FACE="Arial, Helvetica">character_literal</FONT>. </FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>4</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;<A NAME="I2343"></A>The expected type for a <FONT FACE="Arial, Helvetica">primary</FONT>
that is a <FONT FACE="Arial, Helvetica">string_literal</FONT> shall be
a single string type. </DIV>

<H4 ALIGN=CENTER>Legality Rules</H4>
<DIV Class="Paranum"><FONT SIZE=-2>5</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;A <FONT FACE="Arial, Helvetica">character_literal</FONT>
that is a <FONT FACE="Arial, Helvetica">name</FONT> shall correspond
to a <FONT FACE="Arial, Helvetica">defining_character_literal</FONT>
of the expected type, or of the result type of the expected profile.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>6</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;For each character of a <FONT FACE="Arial, Helvetica">string_literal</FONT>
with a given expected string type, there shall be a corresponding <FONT FACE="Arial, Helvetica">defining_character_literal</FONT>
of the component type of the expected string type.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>7</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;A literal <FONT FACE="Arial, Helvetica">null</FONT>
shall not be of an anonymous access type[, since such types do not have
a null value (see <A HREF="AA-3-10.html">3.10</A>)]. </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>7.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Reason: </B>This is a legality
rule rather than an overloading rule, to simplify implementations. </FONT></DIV>

<H4 ALIGN=CENTER>Static Semantics</H4>
<DIV Class="Paranum"><FONT SIZE=-2>8</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;An integer literal is of type <I>universal_integer</I>.
A real literal is of type <I>universal_real</I>.</DIV>

<H4 ALIGN=CENTER>Dynamic Semantics</H4>
<DIV Class="Paranum"><FONT SIZE=-2>9</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;<A NAME="I2344"></A><A NAME="I2345"></A><A NAME="I2346"></A><A NAME="I2347"></A>The
evaluation of a numeric literal, or the literal <B>null</B>, yields the
represented value.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>10</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;<A NAME="I2348"></A>The evaluation of a <FONT FACE="Arial, Helvetica">string_literal</FONT>
that is a <FONT FACE="Arial, Helvetica">primary</FONT> yields an array
value containing the value of each character of the sequence of characters
of the <FONT FACE="Arial, Helvetica">string_literal</FONT>, as defined
in <A HREF="AA-2-6.html">2.6</A>. The bounds of this array value are
determined according to the rules for <FONT FACE="Arial, Helvetica">positional_array_aggregate</FONT>s
(see <A HREF="AA-4-3-3.html">4.3.3</A>), except that for a null string
literal, the upper bound is the predecessor of the lower bound.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>11</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;<A NAME="I2349"></A><A NAME="I2350"></A>For the
evaluation of a <FONT FACE="Arial, Helvetica">string_literal</FONT> of
type <I>T</I>, a check is made that the value of each character of the
<FONT FACE="Arial, Helvetica">string_literal</FONT> belongs to the component
subtype of <I>T</I>. For the evaluation of a null string literal, a check
is made that its lower bound is greater than the lower bound of the base
range of the index type. <A NAME="I2351"></A>The exception Constraint_Error
is raised if either of these checks fails. </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>11.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Ramification: </B>The checks
on the characters need not involve more than two checks altogether, since
one need only check the characters of the string with the lowest and
highest position numbers against the range of the component subtype.
</FONT></DIV>
<DIV Class="NotesHeader"><FONT SIZE=-1>NOTES</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>12</FONT></DIV>
<DIV Class="Notes"><FONT SIZE=-1>6&nbsp;&nbsp;Enumeration literals that
are <FONT FACE="Arial, Helvetica">identifier</FONT>s rather than <FONT FACE="Arial, Helvetica">character_literal</FONT>s
follow the normal rules for <FONT FACE="Arial, Helvetica">identifier</FONT>s
when used in a <FONT FACE="Arial, Helvetica">name</FONT> (see <A HREF="AA-4-1.html">4.1</A>
and <A HREF="AA-4-1-3.html">4.1.3</A>). <FONT FACE="Arial, Helvetica">Character_literal</FONT>s
used as <FONT FACE="Arial, Helvetica">selector_name</FONT>s follow the
normal rules for expanded names (see <A HREF="AA-4-1-3.html">4.1.3</A>).
</FONT></DIV>

<H4 ALIGN=CENTER>Examples</H4>
<DIV Class="Paranum"><FONT SIZE=-2>13</FONT></DIV>
<DIV Class="Normal" Style="margin-bottom: 0.4em">&nbsp;&nbsp;&nbsp;&nbsp;<I>Examples of
literals:</I> </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>14</FONT></DIV>
<DIV Class="Examples"><TT>3.14159_26536&nbsp;&nbsp;&nbsp;&nbsp;<I>--&nbsp;&nbsp;a&nbsp;real&nbsp;literal</I><BR>
1_345&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>--&nbsp;&nbsp;an&nbsp;integer&nbsp;literal</I><BR>
'A'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>--&nbsp;&nbsp;a&nbsp;character&nbsp;literal</I><BR>
&quot;Some&nbsp;Text&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>--&nbsp;&nbsp;a&nbsp;string&nbsp;literal&nbsp;</I></TT></DIV>

<H4 ALIGN=CENTER>Incompatibilities With Ada 83</H4>
<DIV Class="Paranum"><FONT SIZE=-2>14.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><A NAME="I2352"></A>Because <FONT FACE="Arial, Helvetica">character_literal</FONT>s
are now treated like other literals, in that they are resolved using
context rather than depending on direct visibility, additional qualification
might be necessary when passing a <FONT FACE="Arial, Helvetica">character_literal</FONT>
to an overloaded subprogram. </FONT></DIV>

<H4 ALIGN=CENTER>Extensions to Ada 83</H4>
<DIV Class="Paranum"><FONT SIZE=-2>14.b</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><A NAME="I2353"></A><FONT FACE="Arial, Helvetica">Character_literal</FONT>s
are now treated analogously to <B>null</B> and <FONT FACE="Arial, Helvetica">string_literal</FONT>s,
in that they are resolved using context, rather than their content; the
declaration of the corresponding <FONT FACE="Arial, Helvetica">defining_character_literal</FONT>
need not be directly visible. </FONT></DIV>

<H4 ALIGN=CENTER>Wording Changes from Ada 83</H4>
<DIV Class="Paranum"><FONT SIZE=-2>14.c</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>Name Resolution rules for enumeration
literals that are not <FONT FACE="Arial, Helvetica">character_literal</FONT>s
are not included anymore, since they are neither syntactically nor semantically
&quot;literals&quot; but are rather names of parameterless functions.
</FONT></DIV>

<HR>
<P><A HREF="AA-TOC.html">Contents</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-0-29.html">Index</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-4-1-4.html">Previous</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-4-3.html">Next</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-TTL.html">Legal</A></P>
</BODY>
</HTML>