chiark / gitweb /
src/module-parse.lisp: Improve error recovery for `initarg' class-items.
[sod] / doc / syntax.tex
index 0b7456f57f2310bfebfed52df2f5755dd2dc7a1c..35ab100d26e5010748abd1ee415f30547ee108fc 100644 (file)
@@ -196,16 +196,16 @@ binary.  However, length and signedness indicators are not permitted.
 
 <not-star-or-slash> ::= any character other than "*" or  "/"
 
-<line-comment> ::= "//" @<not-newline>^* <newline>
+<line-comment> ::= "/\,/" @<not-newline>^* <newline>
 
 <newline> ::= a newline character
 
 <not-newline> ::= any character other than newline
 \end{grammar}
 
-Comments are exactly as in C99: both traditional block comments `\texttt{/*}
-\dots\ \texttt{*/}' and \Cplusplus-style `\texttt{//} \dots' comments are
-permitted and ignored.
+Comments are exactly as in C99: both traditional block comments `@|/*| \dots\
+@|*/|' and \Cplusplus-style `@|/\,/| \dots' comments are permitted and
+ignored.
 
 
 \subsection{Special nonterminals} \label{sec:syntax.lex.special}
@@ -407,14 +407,15 @@ though the only operators currently defined act on integer values only.
 
 \subsubsection{The expression evaluator}
 \begin{grammar}
-<expression> ::= <term> | <expression> "+" <term> | <expression> "-" <term>
+<expression> ::= <term> | <expression> "+" <term> | <expression> "--" <term>
 
 <term> ::= <factor> | <term> "*" <factor> | <term> "/" <factor>
 
-<factor> ::= <primary> | "+" <factor> | "-" <factor>
+<factor> ::= <primary> | "+" <factor> | "--" <factor>
 
 <primary> ::=
      <integer-literal> | <string-literal> | <char-literal> | <identifier>
+\alt "<" <plain-type> ">"
 \alt "?" <s-expression>
 \alt "(" <expression> ")"
 \end{grammar}
@@ -456,8 +457,10 @@ recognized.
 
 <qualifier> ::= <atomic> | "const" | "volatile" | "restrict"
 
+<plain-type> ::= @<declaration-specifier>^+ <abstract-declarator>
+
 <atomic-type> ::=
-  <atomic> "(" @<declaration-specifier>^+ <abstract-declarator> ")"
+  <atomic> "(" <plain-type> ")"
 
 <atomic> ::= "atomic" | "_Atomic"
 
@@ -517,14 +520,15 @@ All of these have their usual C meanings.
 <declarator-suffix>$[a]$ ::= "[" <c-fragment> "]"
 \alt "(" $a$ ")"
 
-<argument-list> ::= $\epsilon$ | "..."
-\alt <list>$[\mbox{@<argument>}]$ @["," "..."@]
+<argument-list> ::= $\epsilon$ | "\dots"
+\alt <list>$[\mbox{@<argument>}]$ @["," "\dots"@]
 
 <argument> ::= @<declaration-specifier>^+ <argument-declarator>
 
 <abstract-declarator> ::= <declarator>$[\epsilon, \mbox{@<argument-list>}]$
 
 <argument-declarator> ::= <declarator>$[\mbox{@<identifier> @! $\epsilon$}]$
+
 <argument-declarator> ::=
   <declarator>$[\mbox{@<identifier> @! $\epsilon$}, \mbox{@<argument-list>}]$
 
@@ -579,14 +583,14 @@ A @<class-forward-declaration> informs Sod that an @<identifier> will be used
 to name a class which is currently undefined.  Forward declarations are
 necessary in order to resolve certain kinds of circularity.  For example,
 \begin{prog}
-class Sub;
-\\+
-class Super : SodObject \{ \\ \ind
-  Sub *sub; \- \\
-\};
-\\+
-class Sub : Super \{ \\ \ind
-  /* \dots */ \- \\
+class Sub;                                                      \\+
+
+class Super : SodObject \{                                      \\ \ind
+  Sub *sub;                                                   \-\\
+\};                                                             \\+
+
+class Sub : Super \{                                            \\ \ind
+  /* \dots\ */                                                \-\\
 \};
 \end{prog}
 
@@ -665,17 +669,17 @@ An @<initializer>, if present, is treated as if a separate
 @<initializer-item> containing the slot name and initializer were present.
 For example,
 \begin{prog}
-[nick = eg] \\-
-class Example : Super \{ \\ \ind
-  int foo = 17; \- \\
+[nick = eg]                                                     \\
+class Example : Super \{                                        \\ \ind
+  int foo = 17;                                               \-\\
 \};
 \end{prog}
 means the same as
 \begin{prog}
-[nick = eg] \\-
-class Example : Super \{ \\ \ind
-  int foo; \\
-  eg.foo = 17; \- \\
+[nick = eg]                                                     \\
+class Example : Super \{                                        \\ \ind
+  int foo;                                                      \\
+  eg.foo = 17;                                                \-\\
 \};
 \end{prog}