Values
The grammar productions in this section define lexical syntax,
hence no white space is allowed.
Integers
All integers can be written in either decimal or hexadecimal notation.
In both cases, digits can optionally be separated by underscores.
\[\begin{split}\begin{array}{llclll@{\qquad}l}
\def\mathdef3867#1{{}}\mathdef3867{sign} & \href{../text/values.html#text-sign}{\mathtt{sign}} &::=&
\epsilon \Rightarrow {+} ~~|~~
\def\mathdef3906#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3906{+} \Rightarrow {+} ~~|~~
\def\mathdef3907#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3907{-} \Rightarrow {-} \\
\def\mathdef3867#1{{}}\mathdef3867{decimal digit} & \href{../text/values.html#text-digit}{\mathtt{digit}} &::=&
\def\mathdef3908#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3908{0} \Rightarrow 0 ~~|~~ \dots ~~|~~ \def\mathdef3909#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3909{9} \Rightarrow 9 \\
\def\mathdef3867#1{{}}\mathdef3867{hexadecimal digit} & \href{../text/values.html#text-hexdigit}{\mathtt{hexdigit}} &::=&
d{:}\href{../text/values.html#text-digit}{\mathtt{digit}} \Rightarrow d \\ &&|&
\def\mathdef3910#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3910{A} \Rightarrow 10 ~~|~~ \dots ~~|~~ \def\mathdef3911#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3911{F} \Rightarrow 15 \\ &&|&
\def\mathdef3912#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3912{a} \Rightarrow 10 ~~|~~ \dots ~~|~~ \def\mathdef3913#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3913{f} \Rightarrow 15
\\[1ex]
\def\mathdef3867#1{{}}\mathdef3867{decimal number} & \href{../text/values.html#text-num}{\mathtt{num}} &::=&
d{:}\href{../text/values.html#text-digit}{\mathtt{digit}} &\Rightarrow& d \\ &&|&
n{:}\href{../text/values.html#text-num}{\mathtt{num}}~~\def\mathdef3914#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3914{\_}^?~~d{:}\href{../text/values.html#text-digit}{\mathtt{digit}} &\Rightarrow& 10\cdot n + d \\
\def\mathdef3867#1{{}}\mathdef3867{hexadecimal number} & \href{../text/values.html#text-hexnum}{\mathtt{hexnum}} &::=&
h{:}\href{../text/values.html#text-hexdigit}{\mathtt{hexdigit}} &\Rightarrow& h \\ &&|&
n{:}\href{../text/values.html#text-hexnum}{\mathtt{hexnum}}~~\def\mathdef3915#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3915{\_}^?~~h{:}\href{../text/values.html#text-hexdigit}{\mathtt{hexdigit}} &\Rightarrow& 16\cdot n + h \\
\end{array}\end{split}\]
The allowed syntax for integer literals depends on size and signedness.
Moreover, their value must lie within the range of the respective type.
\[\begin{split}\begin{array}{llclll@{\qquad}l}
\def\mathdef3867#1{{}}\mathdef3867{unsigned integer} & \href{../text/values.html#text-int}{\def\mathdef3888#1{{\mathtt{u}#1}}\mathdef3888{N}} &::=&
n{:}\href{../text/values.html#text-num}{\mathtt{num}} &\Rightarrow& n & (\mathrel{\mbox{if}} n < 2^N) \\ &&|&
\def\mathdef3916#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3916{0x}~~n{:}\href{../text/values.html#text-hexnum}{\mathtt{hexnum}} &\Rightarrow& n & (\mathrel{\mbox{if}} n < 2^N) \\
\def\mathdef3867#1{{}}\mathdef3867{signed integer} & \href{../text/values.html#text-int}{\def\mathdef3894#1{{\mathtt{s}#1}}\mathdef3894{N}} &::=&
{\pm}{:}\href{../text/values.html#text-sign}{\mathtt{sign}}~~n{:}\href{../text/values.html#text-num}{\mathtt{num}} &\Rightarrow& \pm n & (\mathrel{\mbox{if}} -2^{N-1} \leq \pm n < 2^{N-1}) \\ &&|&
{\pm}{:}\href{../text/values.html#text-sign}{\mathtt{sign}}~~\def\mathdef3917#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3917{0x}~~n{:}\href{../text/values.html#text-hexnum}{\mathtt{hexnum}} &\Rightarrow& \pm n & (\mathrel{\mbox{if}} -2^{N-1} \leq \pm n < 2^{N-1}) \\
\end{array}\end{split}\]
Uninterpreted integers can be written as either signed or unsigned, and are normalized to unsigned in the abstract syntax.
\[\begin{split}\begin{array}{llclll@{\qquad\qquad}l}
\def\mathdef3867#1{{}}\mathdef3867{uninterpreted integers} & \href{../text/values.html#text-int}{\def\mathdef3897#1{{\mathtt{i}#1}}\mathdef3897{N}} &::=&
n{:}\href{../text/values.html#text-int}{\def\mathdef3888#1{{\mathtt{u}#1}}\mathdef3888{N}} &\Rightarrow& n \\ &&|&
i{:}\href{../text/values.html#text-int}{\def\mathdef3894#1{{\mathtt{s}#1}}\mathdef3894{N}} &\Rightarrow& n & (\mathrel{\mbox{if}} i = \href{../exec/numerics.html#aux-signed}{\mathrm{signed}}(n)) \\
\end{array}\end{split}\]
Floating-Point
Floating-point values can be represented in either decimal or hexadecimal notation.
\[\begin{split}\begin{array}{llclll@{\qquad\qquad}l}
\def\mathdef3867#1{{}}\mathdef3867{decimal floating-point fraction} & \href{../text/values.html#text-frac}{\mathtt{frac}} &::=&
d{:}\href{../text/values.html#text-digit}{\mathtt{digit}} &\Rightarrow& d/10 \\ &&|&
d{:}\href{../text/values.html#text-digit}{\mathtt{digit}}~~\def\mathdef3918#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3918{\_}^?~~p{:}\href{../text/values.html#text-frac}{\mathtt{frac}} &\Rightarrow& (d+p/10)/10 \\
\def\mathdef3867#1{{}}\mathdef3867{hexadecimal floating-point fraction} & \href{../text/values.html#text-hexfrac}{\mathtt{hexfrac}} &::=&
h{:}\href{../text/values.html#text-hexdigit}{\mathtt{hexdigit}} &\Rightarrow& h/16 \\ &&|&
h{:}\href{../text/values.html#text-hexdigit}{\mathtt{hexdigit}}~~\def\mathdef3919#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3919{\_}^?~~p{:}\href{../text/values.html#text-hexfrac}{\mathtt{hexfrac}} &\Rightarrow& (h+p/16)/16 \\
\def\mathdef3867#1{{}}\mathdef3867{decimal floating-point number} & \href{../text/values.html#text-float}{\mathtt{float}} &::=&
p{:}\href{../text/values.html#text-num}{\mathtt{num}}~\def\mathdef3920#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3920{.}^?
&\Rightarrow& p \\ &&|&
p{:}\href{../text/values.html#text-num}{\mathtt{num}}~\def\mathdef3921#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3921{.}~q{:}\href{../text/values.html#text-frac}{\mathtt{frac}}
&\Rightarrow& p+q \\ &&|&
p{:}\href{../text/values.html#text-num}{\mathtt{num}}~\def\mathdef3922#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3922{.}^?~(\def\mathdef3923#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3923{E}~|~\def\mathdef3924#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3924{e})~{\pm}{:}\href{../text/values.html#text-sign}{\mathtt{sign}}~e{:}\href{../text/values.html#text-num}{\mathtt{num}}
&\Rightarrow& p\cdot 10^{\pm e} \\ &&|&
p{:}\href{../text/values.html#text-num}{\mathtt{num}}~\def\mathdef3925#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3925{.}~q{:}\href{../text/values.html#text-frac}{\mathtt{frac}}~(\def\mathdef3926#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3926{E}~|~\def\mathdef3927#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3927{e})~{\pm}{:}\href{../text/values.html#text-sign}{\mathtt{sign}}~e{:}\href{../text/values.html#text-num}{\mathtt{num}}
&\Rightarrow& (p+q)\cdot 10^{\pm e} \\
\def\mathdef3867#1{{}}\mathdef3867{hexadecimal floating-point number} & \href{../text/values.html#text-hexfloat}{\mathtt{hexfloat}} &::=&
\def\mathdef3928#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3928{0x}~p{:}\href{../text/values.html#text-hexnum}{\mathtt{hexnum}}~\def\mathdef3929#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3929{.}^?
&\Rightarrow& p \\ &&|&
\def\mathdef3930#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3930{0x}~p{:}\href{../text/values.html#text-hexnum}{\mathtt{hexnum}}~\def\mathdef3931#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3931{.}~q{:}\href{../text/values.html#text-hexfrac}{\mathtt{hexfrac}}
&\Rightarrow& p+q \\ &&|&
\def\mathdef3932#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3932{0x}~p{:}\href{../text/values.html#text-hexnum}{\mathtt{hexnum}}~\def\mathdef3933#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3933{.}^?~(\def\mathdef3934#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3934{P}~|~\def\mathdef3935#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3935{p})~{\pm}{:}\href{../text/values.html#text-sign}{\mathtt{sign}}~e{:}\href{../text/values.html#text-num}{\mathtt{num}}
&\Rightarrow& p\cdot 2^{\pm e} \\ &&|&
\def\mathdef3936#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3936{0x}~p{:}\href{../text/values.html#text-hexnum}{\mathtt{hexnum}}~\def\mathdef3937#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3937{.}~q{:}\href{../text/values.html#text-hexfrac}{\mathtt{hexfrac}}~(\def\mathdef3938#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3938{P}~|~\def\mathdef3939#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3939{p})~{\pm}{:}\href{../text/values.html#text-sign}{\mathtt{sign}}~e{:}\href{../text/values.html#text-num}{\mathtt{num}}
&\Rightarrow& (p+q)\cdot 2^{\pm e}
\end{array}\end{split}\]
The value of a literal must not lie outside the representable range of the corresponding IEEE 754 type
(that is, a numeric value must not overflow to \(\pm\mbox{infinity}\)),
but it may be rounded to the nearest representable value.
Note
Rounding can be prevented by using hexadecimal notation with no more significant bits than supported by the required type.
Floating-point values may also be written as constants for infinity or canonical NaN (not a number).
Furthermore, arbitrary NaN values may be expressed by providing an explicit payload value.
\[\begin{split}\begin{array}{llclll@{\qquad\qquad}l}
\def\mathdef3867#1{{}}\mathdef3867{floating-point value} & \href{../text/values.html#text-float}{\def\mathdef3902#1{{\mathtt{f}#1}}\mathdef3902{N}} &::=&
{\pm}{:}\href{../text/values.html#text-sign}{\mathtt{sign}}~z{:}\href{../text/values.html#text-float}{\def\mathdef3903#1{{\mathtt{f}#1}}\mathdef3903{N}\mathtt{mag}} &\Rightarrow& \pm z \\
\def\mathdef3867#1{{}}\mathdef3867{floating-point magnitude} & \href{../text/values.html#text-float}{\def\mathdef3903#1{{\mathtt{f}#1}}\mathdef3903{N}\mathtt{mag}} &::=&
z{:}\href{../text/values.html#text-float}{\mathtt{float}} &\Rightarrow& \href{../exec/numerics.html#aux-ieee}{\mathrm{float}}_N(z) & (\mathrel{\mbox{if}} \href{../exec/numerics.html#aux-ieee}{\mathrm{float}}_N(z) \neq \pm \infty) \\ &&|&
z{:}\href{../text/values.html#text-hexfloat}{\mathtt{hexfloat}} &\Rightarrow& \href{../exec/numerics.html#aux-ieee}{\mathrm{float}}_N(z) & (\mathrel{\mbox{if}} \href{../exec/numerics.html#aux-ieee}{\mathrm{float}}_N(z) \neq \pm \infty) \\ &&|&
\def\mathdef3940#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3940{inf} &\Rightarrow& \infty \\ &&|&
\def\mathdef3941#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3941{nan} &\Rightarrow& \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(\href{../syntax/values.html#aux-canon}{\mathrm{canon}}_N) \\ &&|&
\def\mathdef3942#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3942{nan{:}0x}~n{:}\href{../text/values.html#text-hexnum}{\mathtt{hexnum}} &\Rightarrow& \href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n) & (\mathrel{\mbox{if}} 1 \leq n < 2^{\href{../syntax/values.html#aux-significand}{\mathrm{signif}}(N)}) \\
\end{array}\end{split}\]
Strings
Strings denote sequences of bytes that can represent both textual and binary data.
They are enclosed in quotation marks
and may contain any character other than ASCII control characters, quotation marks (\(\def\mathdef3943#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3943{"}\)), or backslash (\(\def\mathdef3944#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3944{\backslash}\)),
except when expressed with an escape sequence.
\[\begin{split}\begin{array}{llclll@{\qquad\qquad}l}
\def\mathdef3867#1{{}}\mathdef3867{string} & \href{../text/values.html#text-string}{\mathtt{string}} &::=&
\def\mathdef3945#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3945{"}~(b^\ast{:}\href{../text/values.html#text-string}{\mathtt{stringelem}})^\ast~\def\mathdef3946#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3946{"}
&\Rightarrow& \href{../syntax/conventions.html#notation-concat}{\mathrm{concat}}((b^\ast)^\ast)
& (\mathrel{\mbox{if}} |\href{../syntax/conventions.html#notation-concat}{\mathrm{concat}}((b^\ast)^\ast)| < 2^{32}) \\
\def\mathdef3867#1{{}}\mathdef3867{string element} & \href{../text/values.html#text-string}{\mathtt{stringelem}} &::=&
c{:}\href{../text/values.html#text-string}{\mathtt{stringchar}} &\Rightarrow& \href{../binary/values.html#binary-utf8}{\mathrm{utf8}}(c) \\ &&|&
\def\mathdef3947#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3947{\backslash}~n{:}\href{../text/values.html#text-hexdigit}{\mathtt{hexdigit}}~m{:}\href{../text/values.html#text-hexdigit}{\mathtt{hexdigit}}
&\Rightarrow& 16\cdot n+m \\
\end{array}\end{split}\]
Each character in a string literal represents the byte sequence corresponding to its UTF-8 Unicode (Section 2.5) encoding,
except for hexadecimal escape sequences \(\mbox{‘}\backslash hh\mbox{’}\), which represent raw bytes of the respective value.
\[\begin{split}\begin{array}{llclll@{\qquad\qquad}l}
\def\mathdef3867#1{{}}\mathdef3867{string character} & \href{../text/values.html#text-string}{\mathtt{stringchar}} &::=&
c{:}\href{../text/lexical.html#text-char}{\mathtt{char}} &\Rightarrow& c \qquad
& (\mathrel{\mbox{if}} c \geq \def\mathdef3948#1{\mathrm{U{+}#1}}\mathdef3948{20} \wedge c \neq \def\mathdef3949#1{\mathrm{U{+}#1}}\mathdef3949{7F} \wedge c \neq \def\mathdef3950#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3950{"} \wedge c \neq \def\mathdef3951#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3951{\backslash}) \\ &&|&
\def\mathdef3952#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3952{\backslash t} &\Rightarrow& \def\mathdef3953#1{\mathrm{U{+}#1}}\mathdef3953{09} \\ &&|&
\def\mathdef3954#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3954{\backslash n} &\Rightarrow& \def\mathdef3955#1{\mathrm{U{+}#1}}\mathdef3955{0A} \\ &&|&
\def\mathdef3956#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3956{\backslash r} &\Rightarrow& \def\mathdef3957#1{\mathrm{U{+}#1}}\mathdef3957{0D} \\ &&|&
\def\mathdef3958#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3958{\backslash{"}} &\Rightarrow& \def\mathdef3959#1{\mathrm{U{+}#1}}\mathdef3959{22} \\ &&|&
\def\mathdef3960#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3960{\backslash{'}} &\Rightarrow& \def\mathdef3961#1{\mathrm{U{+}#1}}\mathdef3961{27} \\ &&|&
\def\mathdef3962#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3962{\backslash\backslash} &\Rightarrow& \def\mathdef3963#1{\mathrm{U{+}#1}}\mathdef3963{5C} \\ &&|&
\def\mathdef3964#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3964{\backslash u\{}~n{:}\href{../text/values.html#text-hexnum}{\mathtt{hexnum}}~\def\mathdef3965#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3965{\}}
&\Rightarrow& \def\mathdef3966#1{\mathrm{U{+}#1}}\mathdef3966{(n)} & (\mathrel{\mbox{if}} n < \def\mathdef3967#1{\mathtt{0x#1}}\mathdef3967{D800} \vee \def\mathdef3968#1{\mathtt{0x#1}}\mathdef3968{E000} \leq n < \def\mathdef3969#1{\mathtt{0x#1}}\mathdef3969{110000}) \\
\end{array}\end{split}\]
Names
Names are strings denoting a literal character sequence.
A name string must form a valid UTF-8 encoding as defined by Unicode (Section 2.5) and is interpreted as a string of Unicode scalar values.
\[\begin{split}\begin{array}{llclll@{\qquad}l}
\def\mathdef3867#1{{}}\mathdef3867{name} & \href{../text/values.html#text-name}{\mathtt{name}} &::=&
b^\ast{:}\href{../text/values.html#text-string}{\mathtt{string}} &\Rightarrow& c^\ast & (\mathrel{\mbox{if}} b^\ast = \href{../binary/values.html#binary-utf8}{\mathrm{utf8}}(c^\ast)) \\
\end{array}\end{split}\]
Note
Presuming the source text is itself encoded correctly,
strings that do not contain any uses of hexadecimal byte escapes are always valid names.
Identifiers
Indices can be given in both numeric and symbolic form.
Symbolic identifiers that stand in lieu of indices start with \(\def\mathdef3970#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3970{\$}\), followed by any sequence of printable ASCII characters that does not contain a space, quotation mark, comma, semicolon, or bracket.
\[\begin{split}\begin{array}{llclll@{\qquad}l}
\def\mathdef3867#1{{}}\mathdef3867{identifier} & \href{../text/values.html#text-id}{\mathtt{id}} &::=&
\def\mathdef3971#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3971{\$}~\href{../text/values.html#text-idchar}{\mathtt{idchar}}^+ \\
\def\mathdef3867#1{{}}\mathdef3867{identifier character} & \href{../text/values.html#text-idchar}{\mathtt{idchar}} &::=&
\def\mathdef3972#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3972{0} ~~|~~ \dots ~~|~~ \def\mathdef3973#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3973{9} \\ &&|&
\def\mathdef3974#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3974{A} ~~|~~ \dots ~~|~~ \def\mathdef3975#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3975{Z} \\ &&|&
\def\mathdef3976#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3976{a} ~~|~~ \dots ~~|~~ \def\mathdef3977#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3977{z} \\ &&|&
\def\mathdef3978#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3978{!} ~~|~~
\def\mathdef3979#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3979{\#} ~~|~~
\def\mathdef3980#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3980{\$} ~~|~~
\def\mathdef3981#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3981{\%} ~~|~~
\def\mathdef3982#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3982{\&} ~~|~~
\def\mathdef3983#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3983{'} ~~|~~
\def\mathdef3984#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3984{*} ~~|~~
\def\mathdef3985#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3985{+} ~~|~~
\def\mathdef3986#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3986{-} ~~|~~
\def\mathdef3987#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3987{.} ~~|~~
\def\mathdef3988#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3988{/} \\ &&|&
\def\mathdef3989#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3989{:} ~~|~~
\def\mathdef3990#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3990{<} ~~|~~
\def\mathdef3991#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3991{=} ~~|~~
\def\mathdef3992#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3992{>} ~~|~~
\def\mathdef3993#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3993{?} ~~|~~
\def\mathdef3994#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3994{@} ~~|~~
\def\mathdef3995#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3995{\backslash} ~~|~~
\def\mathdef3996#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3996{\hat{~~}} ~~|~~
\def\mathdef3997#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3997{\_} ~~|~~
\def\mathdef3998#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3998{\grave{~~}} ~~|~~
\def\mathdef3999#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef3999{|} ~~|~~
\def\mathdef4000#1{\mbox{‘}\mathtt{#1}\mbox{’}}\mathdef4000{\tilde{~~}} \\
\end{array}\end{split}\]
Conventions
The expansion rules of some abbreviations require insertion of a fresh identifier.
That may be any syntactically valid identifier that does not already occur in the given source text.