X-Git-Url: https://git.distorted.org.uk/~mdw/sod/blobdiff_plain/f575cdca18b30a96a76514c105a933c3e59d6311..00d59354c311fb28730b7c9b117b0d91aac092cc:/doc/syntax.tex diff --git a/doc/syntax.tex b/doc/syntax.tex index fc34e4e..6c05acc 100644 --- a/doc/syntax.tex +++ b/doc/syntax.tex @@ -51,15 +51,15 @@ could be a token. ::= | "_" - ::= @! + ::= | - ::= "A" | "B" $| \cdots |$ "Z" - | "a" | "b" $| \cdots |$ "z" + ::= "A" | "B" | $\cdots$ | "Z" + | "a" | "b" | $\cdots$ | "z" | ::= "0" | - ::= "1" | "2" $| \cdots |$ "9" + ::= "1" | "2" | $\cdots$ | "9" \end{grammar} The precise definition of @ is left to the function @@ -107,15 +107,15 @@ discouraged. ::= "0" | @^* - ::= "0" @("b" @! "B"@) @^+ + ::= "0" @("b" | "B"@) @^+ ::= "0" | "1" - ::= "0" @["o" @! "O"@] @^+ + ::= "0" @["o" | "O"@] @^+ - ::= "0" | "1" $| \cdots |$ "7" + ::= "0" | "1" | $\cdots$ | "7" - ::= "0" @("x" @! "X"@) @^+ + ::= "0" @("x" | "X"@) @^+ ::= | "A" | "B" | "C" | "D" | "E" | "F" @@ -130,7 +130,8 @@ binary. However, length and signedness indicators are not permitted. \subsection{Punctuation} \label{sec:syntax.lex.punct} \begin{grammar} - ::= "\dots" + ::= "<<" | ">>" | "||" | "&&" + | "<=" | ">=" | "==" | "!=" | "\dots" \alt any nonalphanumeric character other than "_", "\"", or "'" \end{grammar} @@ -323,7 +324,7 @@ defined in the built-in module. ::= $[\epsilon, \mbox{@}]$ ::= - $[\mbox{@ @! $\epsilon$}, \mbox{@}]$ + $[\mbox{@ | $\epsilon$}, \mbox{@}]$ ::= $[\mbox{@}, \mbox{@}]$ @@ -351,7 +352,7 @@ keyword arguments. @[$[\mbox{@}]$@] "?" @[$[\mbox{@}]$@] - ::= @! + ::= | ::= "." @@ -367,7 +368,36 @@ keyword arguments. ::= "=" - ::= + ::= + + ::= + | "||" + + ::= + | "&&" + + ::= + | "|" + + ::= + | "^" + + ::= + | "&" + + ::= + | "==" + | "!=" + + ::= + | "<" + | "<=" + | ">=" + | ">" + + ::= + | "<<" + | ">>" ::= | "+" @@ -640,14 +670,18 @@ declarations instead. \begin{grammar} ::= - "code" ":" @[@] + "code" ":" @[@] "{" "}" +\alt + "code" ":" ";" + + ::= ::= "[" $[\mbox{@}]$ "]" ::= @^+ - ::= @! "(" @^+ ")" + ::= | "(" @^+ ")" \end{grammar} The @ will be output unchanged to one of the output files. @@ -676,6 +710,27 @@ preprocessor directives in order to declare types and functions for use elsewhere in the generated output files. +\subsection{Static instance definitions} \label{sec:syntax.module.instance} + +\begin{grammar} + ::= + "instance" + @[":" $[\mbox{@}]$@] ";" + + ::= "." "=" +\end{grammar} + +Properties: +\begin{description} +\item[@"extern"] A boolean flag: if true, then the instance is public, and + will be declared in the output header file; if false (the default), then + the instance is only available to code defined within the module. +\item[@"const"] A boolean flag: if true (the default), then the instance is + read-only, and may end up in write-protected storage at run-time; if false, + then the instance will be writable. +\end{description} + + \subsection{Class definitions} \label{sec:syntax.module.class} \begin{grammar} @@ -869,6 +924,9 @@ Properties: \begin{description} \item[@|message_class|] A symbol naming the Lisp class to use to represent the message. +\item[@|readonly|] A boolean indicating whether the message guarantees not to + modify its receiver. If this is true, the receiver will be declared + @"const". \item[@|combination|] A keyword naming the aggregating method combination to use. \item[@|most_specific|] A keyword, either @`first' or @`last', according to