From 20f9c2138bd3af831e59c0256b3fb99a0692adad Mon Sep 17 00:00:00 2001
From: Mark Wooding <mdw@distorted.org.uk>
Date: Thu, 26 May 2016 09:26:09 +0100
Subject: [PATCH] doc/syntax.tex, src/sod-module.5: Abstract out <plain-type>
 nonterminal.

---
 doc/syntax.tex   | 21 ++++++++++++---------
 src/sod-module.5 |  8 ++++++--
 2 files changed, 18 insertions(+), 11 deletions(-)

diff --git a/doc/syntax.tex b/doc/syntax.tex
index 65bd727..5ac33d1 100644
--- a/doc/syntax.tex
+++ b/doc/syntax.tex
@@ -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,11 +407,11 @@ 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>
@@ -456,8 +456,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 +519,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>}]$
 
diff --git a/src/sod-module.5 b/src/sod-module.5
index 949e781..b13c01e 100644
--- a/src/sod-module.5
+++ b/src/sod-module.5
@@ -750,13 +750,17 @@ class-definition
 |
 .B restrict
 .br
+.I plain-type
+::=
+.IR declaration-specifier \*+
+.I abstract-declarator
+.br
 .I atomic-type
 ::=
 .I
 atomic
 .B (
-.IR declaration-specifier \*+
-.I abstract-declarator
+.I plain-type
 .B )
 .br
 .I atomic
-- 
2.11.0

