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> <A HREF="AA-0-29.html">Index</A> <A HREF="AA-4-1-4.html">Previous</A> <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"> [<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"> <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
("expected type ... shall be a single ... type") replaces the
old "shall be determinable" 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"> <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"> <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"> 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"> 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"> 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"> 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"> <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"> <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"> <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 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"> <I>Examples of
literals:</I> </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>14</FONT></DIV>
<DIV Class="Examples"><TT>3.14159_26536 <I>-- a real literal</I><BR>
1_345 <I>-- an integer literal</I><BR>
'A' <I>-- a character literal</I><BR>
"Some Text" <I>-- a string literal </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
"literals" but are rather names of parameterless functions.
</FONT></DIV>
<HR>
<P><A HREF="AA-TOC.html">Contents</A> <A HREF="AA-0-29.html">Index</A> <A HREF="AA-4-1-4.html">Previous</A> <A HREF="AA-4-3.html">Next</A> <A HREF="AA-TTL.html">Legal</A></P>
</BODY>
</HTML>
|