X-Git-Url: https://git.distorted.org.uk/~mdw/sod/blobdiff_plain/bc7dff5c56d6eed30130b8fa535c8771d83ba36c..2e01fd8b00192c3ace8df389749e73c63b647a79:/doc/syntax.tex diff --git a/doc/syntax.tex b/doc/syntax.tex index f89e9c6..e084be2 100644 --- a/doc/syntax.tex +++ b/doc/syntax.tex @@ -338,7 +338,7 @@ The @ is evaluated immediately. It can do anything it likes. \begin{grammar} ::= - "typename" @[@] ";" + "typename" $[\mbox{@}]$ ";" \end{grammar} Each @ is declared as naming a C type. This is important because @@ -355,7 +355,7 @@ declarations instead. "code" ":" @[@] "{" "}" - ::= "[" @[@] "]" + ::= "[" $[\mbox{@}]$ "]" ::= @^+ \end{grammar} @@ -387,7 +387,7 @@ elsewhere in the generated output files. \subsection{Property sets} \label{sec:syntax.propset} \begin{grammar} - ::= "[" @[@] "]" + ::= "[" $[\mbox{@}]$ "]" ::= "=" \end{grammar} @@ -445,6 +445,8 @@ recognized. \alt "void" | "char" | "int" | "float" | "double" \alt "short" | "long" \alt "signed" | "unsigned" +\alt "bool" | "_Bool" +\alt "imaginary" | "_Imaginary" | "complex" | "_Complex" \alt ::= "const" | "volatile" | "restrict" @@ -453,7 +455,14 @@ recognized. \end{grammar} A @ is an identifier which has been declared as being a type name, -using the @"typename" or @"class" definitions. +using the @"typename" or @"class" definitions. The following type names are +defined in the built-in module. +\begin{itemize} +\item @"va_list" +\item @"size_t" +\item @"ptrdiff_t" +\item @"wchar_t" +\end{itemize} Declaration specifiers may appear in any order. However, not all combinations are permitted. A declaration specifier must consist of zero or @@ -462,6 +471,7 @@ more @, and one of the following, up to reordering. \item @ \item @"struct" @, @"union" @, @"enum" @ \item @"void" +\item @"_Bool", @"bool" \item @"char", @"unsigned char", @"signed char" \item @"short", @"unsigned short", @"signed short" \item @"short int", @"unsigned short int", @"signed short int" @@ -471,35 +481,36 @@ more @, and one of the following, up to reordering. \item @"long long", @"unsigned long long", @"signed long long" \item @"long long int", @"unsigned long long int", @"signed long long int" \item @"float", @"double", @"long double" +\item @"float _Imaginary", @"double _Imaginary", @"long double _Imaginary" +\item @"float imaginary", @"double imaginary", @"long double imaginary" +\item @"float _Complex", @"double _Complex", @"long double _Complex" +\item @"float complex", @"double complex", @"long double complex" \end{itemize} All of these have their usual C meanings. \subsubsection{Declarators} \label{sec:syntax.c-types.declarator} - \begin{grammar} $[k]$ ::= @^* $[k]$ $[k]$ ::= $k$ \alt "(" $[k]$ ")" -\alt $[k]$ @^* +\alt $[k]$ @ ::= "*" @^* ::= "[" "]" \alt "(" ")" - ::= $\epsilon$ | "..." -\alt @[@] @["," "..."@] + ::= $\epsilon$ | "..." +\alt $[\mbox{@}]$ @["," "..."@] ::= @^+ - ::= @[ @! $\epsilon$@] + ::= $[\mbox{@ @! $\epsilon$}]$ - ::= @[@] + ::= $[\mbox{@}]$ ::= "." - - ::= @[@] \end{grammar} The declarator syntax is taken from C, but with some differences. @@ -522,7 +533,6 @@ substance. \end{grammar} \subsubsection{Forward declarations} \label{sec:class.class.forward} - \begin{grammar} ::= "class" ";" \end{grammar} @@ -547,11 +557,13 @@ class Sub : Super { \begin{grammar} ::= @[@] - "class" ":" @[@] - "{" @^* "}" + "class" ":" $[\mbox{@}]$ + "{" @^* "}" - ::= ";" -\alt ";" + ::= @[@] + + ::= +\alt \alt \alt \end{grammar} @@ -563,8 +575,9 @@ give the name of an existing class (other than a forward-referenced class), or an existing type name. It is conventional to give classes `MixedCase' names, to distinguish them from other kinds of identifiers. -The @@[@] names the direct superclasses for the new class. It -is an error if any of these @s does not name a defined class. +The @$[\mbox{@}]$ names the direct superclasses for the new +class. It is an error if any of these @s does not name a defined +class. The @ provide additional information. The standard class properties are as follows. @@ -593,8 +606,7 @@ These items are discussed on the following sections. \begin{grammar} ::= - @[@] - @^+ @[@] + @^+ $[\mbox{@}]$ ";" ::= @["=" @] \end{grammar} @@ -629,7 +641,7 @@ class Example : Super { \subsubsection{Initializer items} \label{sec:syntax.class.init} \begin{grammar} - ::= @["class"@] @[@] + ::= @["class"@] $[\mbox{@}]$ ";" ::= "=" @@ -658,21 +670,22 @@ The initializer has one of two forms. \begin{grammar} ::= - @[@] - @^+ @[@] + @^+ + $[\mbox{@}]$ + @[@] \end{grammar} \subsubsection{Method items} \label{sec:syntax.class.method} \begin{grammar} ::= - @[@] - @^+ + @^+ + $[\mbox{@}]$ + ::= "{" "}" | "extern" ";" \end{grammar} - %%%----- That's all, folks -------------------------------------------------- %%% Local variables: