Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions asllib/aslspec/builtins.spec
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,6 @@ variadic operator cond_op[T](cases: list1(T)) -> T
prose_application = "\begin{itemize}{cases}\end{itemize}",
};

// This constant is for internal use only.
constant bot { "bottom", math_macro = \bot };

constant None {
"the \hyperlink{constant-None}{empty} \optionalterm{}"
};
Expand Down
16 changes: 15 additions & 1 deletion asllib/aslspec/spec.ml
Original file line number Diff line number Diff line change
Expand Up @@ -3459,7 +3459,7 @@ let make_spec_with_builtins ast =
{
ast;
id_to_defining_node;
bottom_constant = get_constant "bot";
bottom_constant = Constant.make "bot" None None [];
bottom_term = Label "bot";
none_constant = get_constant "None";
empty_set = get_constant "empty_set";
Expand All @@ -3475,6 +3475,19 @@ let make_spec_with_builtins ast =
field_to_containing_variant = make_field_to_containing_variant ast;
}

(** [remove_bottom_constant spec] removes the bottom constant from [spec], since
it is only used for typechecking and should not be rendered. *)
let remove_bottom_constant spec =
let ast =
List.filter
(function
| Elem_Constant { Constant.name; _ } when String.equal name "bot" ->
false
| _ -> true)
spec.ast
in
{ spec with ast }

let from_ast ast =
let spec = make_spec_with_builtins ast in
let () = Check.check_no_undefined_ids spec in
Expand All @@ -3489,4 +3502,5 @@ let from_ast ast =
let spec = ExtendNames.extend spec in
let () = Check.CheckRules.check spec in
let spec = add_default_rule_renders spec in
let spec = remove_bottom_constant spec in
spec
2 changes: 0 additions & 2 deletions asllib/aslspec/tests.t/hello.expected
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@
% Macros for elements
% -------------------

\DefineConstant{bot}{\texthypertarget{constant-bot}$\bot$} % EndDefineConstant

\DefineConstant{None}{\texthypertarget{constant-None}$\None$} % EndDefineConstant

\DefineConstant{empty_set}{\texthypertarget{constant-emptyset}$\emptyset$} % EndDefineConstant
Expand Down
6 changes: 2 additions & 4 deletions asllib/aslspec/tests.t/operators.expected
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,6 @@
% Macros for elements
% -------------------

\DefineConstant{bot}{\texthypertarget{constant-bot}$\bot$} % EndDefineConstant

\DefineConstant{None}{\texthypertarget{constant-None}$\None$} % EndDefineConstant

\DefineConstant{empty_set}{\texthypertarget{constant-emptyset}$\emptyset$} % EndDefineConstant
Expand Down Expand Up @@ -52,8 +50,8 @@ The relation
\DefineProse{f}{
\AllApply
\begin{itemize}
\item the sum of all numbers in (1) \texttt{a}, and (2) \texttt{b} is equal to \texttt{c};
\item define \texttt{d} as: if \texttt{a} is in \texttt{S} then \texttt{b} else \texttt{c};
\item the sum of \texttt{a} and \texttt{b} is equal to \texttt{c}
\item define \texttt{d} as: if \texttt{a} is in \texttt{S} then \texttt{b} else \texttt{c}
\item \textbf{the result is:} \texttt{d}.
\end{itemize}
} % EndDefineProse
2 changes: 0 additions & 2 deletions asllib/aslspec/tests.t/relations.expected
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,6 @@
% Macros for elements
% -------------------

\DefineConstant{bot}{\texthypertarget{constant-bot}$\bot$} % EndDefineConstant

\DefineConstant{None}{\texthypertarget{constant-None}$\None$} % EndDefineConstant

\DefineConstant{empty_set}{\texthypertarget{constant-emptyset}$\emptyset$} % EndDefineConstant
Expand Down
12 changes: 5 additions & 7 deletions asllib/aslspec/tests.t/rule.expected
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,6 @@
% Macros for elements
% -------------------

\DefineConstant{bot}{\texthypertarget{constant-bot}$\bot$} % EndDefineConstant

\DefineConstant{None}{\texthypertarget{constant-None}$\None$} % EndDefineConstant

\DefineConstant{empty_set}{\texthypertarget{constant-emptyset}$\emptyset$} % EndDefineConstant
Expand Down Expand Up @@ -79,10 +77,10 @@ The relation
\DefineProse{r}{
\AllApply
\begin{itemize}
\item define \texttt{res} as (1) if \texttt{a} is equal to \texttt{b} holds then \texttt{a}, (2) if \texttt{a} is greater than \texttt{b} holds then the sum of (1) \texttt{a}, and (2) \texttt{b}, and (3) if \texttt{a} is less than \texttt{b} holds then \texttt{b};
\item define \texttt{y} as the rec record with $\Fieldf$ value \texttt{a} and $\Fieldg$ value \texttt{b};
\item define \texttt{r\_f} as the sum of (1) the field $\FIELDf$ of \texttt{r}, and (2) the field $\FIELDg$ of \texttt{r};
\item define \texttt{r'} as \texttt{r} with $\FIELDf$ updated to \texttt{res};
\item \textbf{the result is:} the pair consisting of \texttt{res} (for the output variable \texttt{c}) and \texttt{r'}.
\item define \texttt{res} as \begin{itemize}\item \texttt{a} if \texttt{a} is equal to \texttt{b}, \item the sum of \texttt{a} and \texttt{b} if \texttt{a} is greater than \texttt{b}, and \item \texttt{b} if \texttt{a} is less than \texttt{b}\end{itemize}
\item define \texttt{y} as the rec record with $\Fieldf$ value \texttt{a} and $\Fieldg$ value \texttt{b}
\item define \texttt{r\_f} as the sum of the field $\FIELDf$ of \texttt{r} and the field $\FIELDg$ of \texttt{r}
\item define \texttt{r'} as \texttt{r} with $\FIELDf$ updated to \texttt{res}
\item \textbf{the result is:} the pair consisting of \texttt{res} (for the output variable \texttt{c}) and \texttt{r'} (for the output variable \texttt{r'}).
\end{itemize}
} % EndDefineProse
19 changes: 0 additions & 19 deletions asllib/aslspec/tests.t/run.t
Original file line number Diff line number Diff line change
Expand Up @@ -7,27 +7,8 @@
Generated LaTeX macros into generated_macros.tex
$ aslspec rule.spec --render; diff -w generated_macros.tex rule.expected; rm -f generated_macros.tex
Generated LaTeX macros into generated_macros.tex
82,86c82,86
< \item define \texttt{res} as \begin{itemize}\item \texttt{a} if \texttt{a} is equal to \texttt{b}, \item the sum of \texttt{a} and \texttt{b} if \texttt{a} is greater than \texttt{b}, and \item \texttt{b} if \texttt{a} is less than \texttt{b}\end{itemize}
< \item define \texttt{y} as the rec record with $\Fieldf$ value \texttt{a} and $\Fieldg$ value \texttt{b}
< \item define \texttt{r\_f} as the sum of the field $\FIELDf$ of \texttt{r} and the field $\FIELDg$ of \texttt{r}
< \item define \texttt{r'} as \texttt{r} with $\FIELDf$ updated to \texttt{res}
< \item \textbf{the result is:} the pair consisting of \texttt{res} (for the output variable \texttt{c}) and \texttt{r'} (for the output variable \texttt{r'}).
---
> \item define \texttt{res} as (1) if \texttt{a} is equal to \texttt{b} holds then \texttt{a}, (2) if \texttt{a} is greater than \texttt{b} holds then the sum of (1) \texttt{a}, and (2) \texttt{b}, and (3) if \texttt{a} is less than \texttt{b} holds then \texttt{b};
> \item define \texttt{y} as the rec record with $\Fieldf$ value \texttt{a} and $\Fieldg$ value \texttt{b};
> \item define \texttt{r\_f} as the sum of (1) the field $\FIELDf$ of \texttt{r}, and (2) the field $\FIELDg$ of \texttt{r};
> \item define \texttt{r'} as \texttt{r} with $\FIELDf$ updated to \texttt{res};
> \item \textbf{the result is:} the pair consisting of \texttt{res} (for the output variable \texttt{c}) and \texttt{r'}.
$ aslspec operators.spec --render; diff -w generated_macros.tex operators.expected; rm -f generated_macros.tex
Generated LaTeX macros into generated_macros.tex
55,56c55,56
< \item the sum of \texttt{a} and \texttt{b} is equal to \texttt{c}
< \item define \texttt{d} as: if \texttt{a} is in \texttt{S} then \texttt{b} else \texttt{c}
---
> \item the sum of all numbers in (1) \texttt{a}, and (2) \texttt{b} is equal to \texttt{c};
> \item define \texttt{d} as: if \texttt{a} is in \texttt{S} then \texttt{b} else \texttt{c};

$ aslspec type_name.bad
Syntax Error: illegal element-defining identifier: t2 around type_name.bad line 1 column 41
[1]
Expand Down
2 changes: 0 additions & 2 deletions asllib/aslspec/tests.t/typedefs.expected
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,6 @@
% Macros for elements
% -------------------

\DefineConstant{bot}{\texthypertarget{constant-bot}$\bot$} % EndDefineConstant

\DefineConstant{None}{\texthypertarget{constant-None}$\None$} % EndDefineConstant

\DefineConstant{empty_set}{\texthypertarget{constant-emptyset}$\emptyset$} % EndDefineConstant
Expand Down
47 changes: 25 additions & 22 deletions asllib/doc/ASLFormal.tex
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ \section{Mathematical Definitions and Notations\label{sec:Mathematical Definitio
\hypertarget{constant-equalsign}{}
\RenderType{Sign}

The function $\sign : \overname{\Q}{\vq} \rightarrow \overname{\Sign}{\vs}$ returns the sign of $\vq$:
The function $\sign(\overname{\Q}{\vq}) \rightarrow \overname{\Sign}{\vs}$ returns the sign of $\vq$:
\[
\sign(\vq) \triangleq \begin{cases}
\positivesign & \text{if }\vq > 0\\
Expand Down Expand Up @@ -141,18 +141,21 @@ \section{Mathematical Definitions and Notations\label{sec:Mathematical Definitio
\hypertarget{def-graphtransitive}{}
\hypertarget{def-graphtransitivereflexive}{}
\begin{definition}[Transitive Closure of a Relation]
We denote the transitive closure of a relation $E = V \cartimes V$ by $\graphtransitive{E}$
We denote the transitive closure of a relation $E \subseteq V \cartimes V$ by $\graphtransitive{E}$
and the reflexive-transitive closure of $E$ by $\graphtransitivereflexive{E}$.
\end{definition}

\begin{definition}[Bottom Value]
We use the symbol \RenderConstant{bot} to denote an undefined, or missing, value.
\end{definition}
\paragraph{Function and Relation Notations}
We use a non-standard notation for functions and relations, which is more succinct.
Specifically, we write $f(T_1,\ldots,T_n) \rightarrow R$ to denote a function from
the argument types $T_1,\ldots,T_n$ to the result type $R$.
%
We write $f(T_1,\ldots,T_n) \aslrel{} R$ to denote a relation between the argument types $T_1,\ldots,T_n$ and the result type $R$.

\hypertarget{def-partialfunc}{}
\hypertarget{def-dom}{}
\begin{definition}[Partial Function\label{def:PartialFunction}]
A \emph{partial function}, denoted $f : A \partialto B$, is a function from a \underline{subset} of $A$ to $B$.
A \emph{partial function}, denoted $f(A) \partialto B$, is a function from a \underline{subset} of $A$ to $B$.
The \emph{domain} of a partial function $f$, denoted $\dom(f)$, is the subset of $A$ for which it is defined.
We use expressions like $x \in \dom(f)$ and $x \not\in \dom(f)$ to check whether $x$ is in the domain of $f$
or not in the domain of $f$, respectively.
Expand Down Expand Up @@ -195,7 +198,7 @@ \section{Mathematical Definitions and Notations\label{sec:Mathematical Definitio

\begin{definition}[Function Restriction]
\hypertarget{def-restrictfunc}{}
The \emph{restriction} of a function $f : X \rightarrow Y$ to a subset of its domain
The \emph{restriction} of a function $f(X) \rightarrow Y$ to a subset of its domain
$A \subseteq \dom(f)$, denoted as $\restrictfunc{f}{A}$, is defined
in terms of the set of input-output pairs:
\[
Expand All @@ -210,7 +213,7 @@ \section{Mathematical Definitions and Notations\label{sec:Mathematical Definitio
the expressions corresponding to the arguments.
For example,
\[
\sign : \overname{\Q}{\vq} \rightarrow \overname{\Sign}{\vs}
\sign(\overname{\Q}{\vq}) \rightarrow \overname{\Sign}{\vs}
\]
defines a function type and lets us refer to its argument as $\vq$
and to the result as $\vs$.
Expand Down Expand Up @@ -286,7 +289,7 @@ \subsection{Lists}

\hypertarget{relation-concat}{}
\begin{definition}[List Concatenation]
The parametric function $\concat : \KleeneStar{T} \cartimes \KleeneStar{T} \rightarrow \KleeneStar{T}$ concatenates two lists:
The parametric function $\concat(\KleeneStar{T}, \KleeneStar{T}) \rightarrow \KleeneStar{T}$ concatenates two lists:
\[
L \concat{} M \triangleq
\begin{cases}
Expand Down Expand Up @@ -322,7 +325,7 @@ \subsection{Lists}
\begin{definition}[Equating List Lengths]
The parametric function
\[
\equallength : \overname{\KleeneStar{A}}{a} \cartimes \overname{\KleeneStar{B}}{b} \rightarrow \Bool
\equallength(\overname{\KleeneStar{A}}{a}, \overname{\KleeneStar{B}}{b}) \rightarrow \Bool
\]
compares the length of two lists:
\[
Expand All @@ -332,7 +335,7 @@ \subsection{Lists}

\hypertarget{def-listprefix}{}
\begin{definition}[List Prefix]
The parametric function $\listprefixname : \overname{\KleeneStar{T}}{\vlone} \cartimes \overname{\KleeneStar{T}}{\vltwo} \rightarrow \Bool$ checks whether
The parametric function $\listprefixname(\overname{\KleeneStar{T}}{\vlone}, \overname{\KleeneStar{T}}{\vltwo}) \rightarrow \Bool$ checks whether
the list $\vlone$ is a \emph{prefix} of the list $\vltwo$:
\[
\listprefixname(\vlone, \vltwo) \triangleq \exists \vlthree.\ \vltwo = \vlone \concat \vlthree \enspace.
Expand All @@ -341,7 +344,7 @@ \subsection{Lists}

\hypertarget{def-listrange}{}
\begin{definition}[Indices of a List]
The parametric function $\listrange : \KleeneStar{T} \rightarrow \KleeneStar{\N}$ returns the ($1$-based) list of indices for a given list:
The parametric function $\listrange(\KleeneStar{T}) \rightarrow \KleeneStar{\N}$ returns the ($1$-based) list of indices for a given list:
\[
\begin{array}{rcl}
\listrange(\emptylist) &\triangleq& \emptylist\\
Expand Down Expand Up @@ -370,7 +373,7 @@ \subsection{Lists}
\begin{definition}[Extracting the First Components from a List of Pairs]
The\\ parametric function
\[
\listfstname : \KleeneStar{(T_1 \cartimes T_2)} \rightarrow \KleeneStar{T_1}
\listfstname(\KleeneStar{(T_1 \cartimes T_2)}) \rightarrow \KleeneStar{T_1}
\]
transforms a list of pairs into a lists of elements containing the first components of each pair:
\[
Expand All @@ -385,7 +388,7 @@ \subsection{Lists}
\begin{definition}[Unzipping a List of Pairs]
The parametric function
\[
\unziplist : \KleeneStar{(T_1 \cartimes T_2)} \rightarrow (\KleeneStar{T_1} \cartimes \KleeneStar{T_2})
\unziplist(\KleeneStar{(T_1 \cartimes T_2)}) \rightarrow (\KleeneStar{T_1} \cartimes \KleeneStar{T_2})
\]
transforms a list of pairs into the corresponding pair of lists:
\[
Expand All @@ -402,7 +405,7 @@ \subsection{Lists}
\begin{definition}[Unzipping a List of Triples]
The parametric function
\[
\unziplistthree : \KleeneStar{(T_1 \cartimes T_2 \cartimes T_3)} \rightarrow (\KleeneStar{T_1} \cartimes \KleeneStar{T_2} \cartimes \KleeneStar{T_3})
\unziplistthree(\KleeneStar{(T_1 \cartimes T_2 \cartimes T_3)}) \rightarrow (\KleeneStar{T_1} \cartimes \KleeneStar{T_2} \cartimes \KleeneStar{T_3})
\]
transforms a list of triples into the corresponding triple of lists:
\[
Expand All @@ -419,7 +422,7 @@ \subsection{Lists}
\texthypertarget{relation-listcross}
The parametric function
\[
\listcrossop : \KleeneStar{T_1} \cartimes \KleeneStar{T_2} \aslto \KleeneStar{(T_1 \cartimes T_2)}
\listcrossop(\KleeneStar{T_1}, \KleeneStar{T_2}) \rightarrow \KleeneStar{(T_1 \cartimes T_2)}
\]
computes the cross-product of two lists:
\[
Expand All @@ -445,7 +448,7 @@ \subsection{Lists}
The parametric function
\hypertarget{def-unionlist}{}
\[
\unionlist : \KleeneStar{\pow{T}} \rightarrow \pow{T}
\unionlist(\KleeneStar{\pow{T}}) \rightarrow \pow{T}
\]
takes the union of a list of sets:
\[
Expand All @@ -457,7 +460,7 @@ \subsection{Lists}
The parametric function
\hypertarget{def-intersectionlist}{}
\[
\intersectionlist : \KleeneStar{\pow{T}} \rightarrow \pow{T}
\intersectionlist(\KleeneStar{\pow{T}}) \rightarrow \pow{T}
\]
takes the intersection of a list of sets:
\[
Expand All @@ -470,13 +473,13 @@ \subsection{Lists}

\subsection{Strings}
\hypertarget{relation-stringconcat}{}
The function $\concatstrings : \Strings \cartimes \Strings \rightarrow \Strings$
The function $\concatstrings(\Strings, \Strings) \rightarrow \Strings$
concatenates two strings. %
We slightly abuse notation by using the same symbol $\concat$ for concatenating
a string $S$ and an integer $n$, separated by a hyphen, for example, \verb|return-42|.

\hypertarget{relation-stringofint}{}
The function $\stringofintname : \Z \rightarrow \Strings$ converts an integer number
The function $\stringofintname(\Z) \rightarrow \Strings$ converts an integer number
to the corresponding decimal string.

\subsection{OCaml-style Notations}
Expand Down Expand Up @@ -1110,10 +1113,10 @@ \subsection{Judgments Over Optional Data Types}
Optional data types are prevalent in the AST.
To facilitate transition judgments over optional data types,
we introduce the following parametric relation,
which accepts a one-argument relation (or function) $f : A \aslrel B$
which accepts a one-argument relation (or function) $f(A) \aslrel B$
and applies it to an optional value:
\[
\mapopt{\cdot} : \overname{\Option{A}}{\vvopt} \aslrel \overname{\Option{B}}{\vvoptnew}
\mapopt{\cdot}(\overname{\Option{A}}{\vvopt}) \aslrel \overname{\Option{B}}{\vvoptnew}
\]

\ProseParagraph
Expand Down
3 changes: 1 addition & 2 deletions asllib/doc/ASLmacros.tex
Original file line number Diff line number Diff line change
Expand Up @@ -266,8 +266,6 @@
\let\OldTriangleq\triangleq
\let\OldEmptyset\emptyset
\renewcommand\emptyset[0]{\hyperlink{constant-emptyset}{\OldEmptyset}}
\let\OldBot\bot
\renewcommand\bot[0]{\hyperlink{constant-bot}{\OldBot}}
\renewcommand\triangleq[0]{\hyperlink{def-triangleq}{\OldTriangleq}}
\newcommand\cartimes[0]{\hyperlink{def-cartimes}{\times}}

Expand Down Expand Up @@ -1112,6 +1110,7 @@
\newcommand\aslscan[0]{\hyperlink{def-aslscan}{\textfunc{scan}}} % NO_SPECIFICATION_REQUIRED
\newcommand\Proseaslscan[3]{\hyperlink{def-aslscan}{applying lexical analysis} to #1 with the lexical specification #2 yields the list of tokens #3}
\newcommand\maxmatches[0]{\hyperlink{def-maxmatch}{\textfunc{max\_matches}}} % NO_SPECIFICATION_REQUIRED
\newcommand\nomatch[0]{\hyperlink{def-nomatch}{\textfunc{no\_match}}} % NO_SPECIFICATION_REQUIRED
\newcommand\remaxmatch[0]{\hyperlink{def-rematch}{\textfunc{re\_max\_match}}} % NO_SPECIFICATION_REQUIRED
\newcommand\Token[0]{\hyperlink{def-token}{\mathbb{T}\mathbb{O}\mathbb{K}\mathbb{E}\mathbb{N}}}
\newcommand\discard[0]{\hyperlink{def-discard}{\textfunc{discard}}} % NO_SPECIFICATION_REQUIRED
Expand Down
10 changes: 5 additions & 5 deletions asllib/doc/AbstractSyntax.tex
Original file line number Diff line number Diff line change
Expand Up @@ -442,7 +442,7 @@ \section{Building Parameterized Productions\label{sec:BuildingParameterizedProdu
\[
\buildlist[b](\overname{N}{\vsyms}) \;\aslrel\; \overname{A}{\vsymasts}
\]
which is parameterized by an AST building relation $b : E \aslrel A$,
which is parameterized by an AST building relation $b(E) \aslrel A$,
takes a parse node that represents a possibly-empty list of $E$ values --- $\vsyms$ --- and returns the result of applying $b$
to each of them --- $\vsymasts$.

Expand Down Expand Up @@ -470,7 +470,7 @@ \section{Building Parameterized Productions\label{sec:BuildingParameterizedProdu
\[
\buildclist[b](\overname{N}{\vsyms}) \;\aslrel\; \overname{A}{\vsymasts}
\]
which is parameterized by an AST building relation $b : E \aslrel A$,
which is parameterized by an AST building relation $b(E) \aslrel A$,
takes a parse node that represents a possibly-empty comma-separated list of $E$ values --- $\vsyms$ --- and returns the result of applying $b$
to each of them --- $\vsymasts$.

Expand All @@ -497,7 +497,7 @@ \section{Building Parameterized Productions\label{sec:BuildingParameterizedProdu
\[
\buildplist[b](\overname{N}{\vsyms}) \;\aslrel\; \overname{A}{\vsymasts}
\]
which is parameterized by an AST building relation $b : E \aslrel A$,
which is parameterized by an AST building relation $b(E) \aslrel A$,
takes a parse node that represents a parenthesized comma-separated list of $E$ values --- $\vsyms$ --- and returns the result of applying $b$
to each of them --- $\vsymasts$.

Expand All @@ -515,7 +515,7 @@ \section{Building Parameterized Productions\label{sec:BuildingParameterizedProdu
\[
\buildtclist[b](\overname{N}{\vsyms}) \;\aslrel\; \overname{A}{\vsymasts}
\]
which is parameterized by an AST building relation $b : E \aslrel A$,
which is parameterized by an AST building relation $b(E) \aslrel A$,
takes a parse node that represents a non-empty comma-separated trailing list of $E$ values --- $\vsyms$ --- and returns the result of applying $b$
to each of them --- $\vsymasts$.

Expand All @@ -542,7 +542,7 @@ \section{Building Parameterized Productions\label{sec:BuildingParameterizedProdu
\[
\buildoption[b](\overname{N}{\vsym}) \;\aslrel\; \overname{\Option{A}}{\vsymast}
\]
which is parameterized by an AST building relation $b : N \aslrel A$,
which is parameterized by an AST building relation $b(N) \aslrel A$,
takes a parse node that represents an optional $N$ value $\vsym$, and returns the result of applying $b$
to the value if it exists --- $\vsymasts$.

Expand Down
2 changes: 1 addition & 1 deletion asllib/doc/AssignableExpressions.tex
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ \chapter{Assignable Expressions\label{chap:AssignableExpressions}}
\paragraph{Viewing Assignable Expressions as Right-hand-side Expressions:}
Some of the typing rules and semantics rules require viewing \assignableexpressions\
as \rhsexpressions.
The correspondence is given by the function $\torexpr : \lexpr \rightarrow \expr$, defined in \secref{LeftToRight}.
The correspondence is given by the function $\torexpr(\lexpr) \rightarrow \expr$, defined in \secref{LeftToRight}.
%
For example, \SemanticsRuleRef{LESetField}
needs to evaluate the record subexpression $\rerecord$, which is an \assignableexpression.
Expand Down
Loading
Loading