doc/syntax.tex: Reformat the various grammar fragments.
authorMark Wooding <mdw@distorted.org.uk>
Tue, 20 Aug 2019 10:30:52 +0000 (11:30 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Tue, 20 Aug 2019 11:29:52 +0000 (12:29 +0100)
  * Move the prose descriptions to the final case (e.g., for
    <string-literal-char> and <char-literal-char>).

  * Present alternatives on a single line where possible.

  * Use centre-level dots consistently to denote elisions of
    alternatives.

  * Space alternatives consistently.

doc/syntax.tex

index 07b7ce7..fc34e4e 100644 (file)
@@ -53,13 +53,13 @@ could be a token.
 
 <id-body-char> ::= <id-start-char> @! <digit-char>
 
-<alpha-char> ::= "A" | "B" | \dots\ | "Z"
-\alt "a" | "b" | \dots\ | "z"
-\alt <extended-alpha-char>
+<alpha-char> ::= "A" | "B" $| \cdots |$ "Z"
+  | "a" | "b" $| \cdots |$ "z"
+  | <extended-alpha-char>
 
 <digit-char> ::= "0" | <nonzero-digit-char>
 
-<nonzero-digit-char> ::= "1" | "2" $| \ldots |$ "9"
+<nonzero-digit-char> ::= "1" | "2" $| \cdots |$ "9"
 \end{grammar}
 
 The precise definition of @<alpha-char> is left to the function
@@ -80,11 +80,11 @@ level.
 
 <char-literal> ::= "'" <char-literal-char> "'"
 
-<string-literal-char> ::= any character other than "\\" or "\""
-\alt "\\" <char>
+<string-literal-char> :: "\\" <char>
+  | any character other than "\\" or "\""
 
-<char-literal-char> ::= any character other than "\\" or "'"
-\alt "\\" <char>
+<char-literal-char> :: "\\" <char>
+  | any character other than "\\" or "'"
 
 <char> ::= any single character
 \end{grammar}
@@ -101,25 +101,25 @@ discouraged.
 
 \begin{grammar}
 <integer-literal> ::= <decimal-integer>
-\alt <binary-integer>
-\alt <octal-integer>
-\alt <hex-integer>
+  | <binary-integer>
+  | <octal-integer>
+  | <hex-integer>
 
 <decimal-integer> ::= "0" | <nonzero-digit-char> @<digit-char>^*
 
-<binary-integer> ::= "0" @("b"|"B"@) @<binary-digit-char>^+
+<binary-integer> ::= "0" @("b" @! "B"@) @<binary-digit-char>^+
 
 <binary-digit-char> ::= "0" | "1"
 
-<octal-integer> ::= "0" @["o"|"O"@] @<octal-digit-char>^+
+<octal-integer> ::= "0" @["o" @! "O"@] @<octal-digit-char>^+
 
-<octal-digit-char> ::= "0" | "1" $| \ldots |$ "7"
+<octal-digit-char> ::= "0" | "1" $| \cdots |$ "7"
 
-<hex-integer> ::= "0" @("x"|"X"@) @<hex-digit-char>^+
+<hex-integer> ::= "0" @("x" @! "X"@) @<hex-digit-char>^+
 
 <hex-digit-char> ::= <digit-char>
-\alt "A" | "B" | "C" | "D" | "E" | "F"
-\alt "a" | "b" | "c" | "d" | "e" | "f"
+  | "A" | "B" | "C" | "D" | "E" | "F"
+  | "a" | "b" | "c" | "d" | "e" | "f"
 \end{grammar}
 
 Sod understands only integers, not floating-point numbers; its integer syntax
@@ -130,15 +130,15 @@ binary.  However, length and signedness indicators are not permitted.
 \subsection{Punctuation} \label{sec:syntax.lex.punct}
 
 \begin{grammar}
-<punctuation> ::= any nonalphanumeric character other than "_", "\"" or "'"
+<punctuation> ::= "\dots"
+\alt any nonalphanumeric character other than "_", "\"", or "'"
 \end{grammar}
 
 
 \subsection{Comments} \label{sec:syntax.lex.comment}
 
 \begin{grammar}
-<comment> ::= <block-comment>
-\alt <line-comment>
+<comment> ::= <block-comment> | <line-comment>
 
 <block-comment> ::=
   "/*"
@@ -367,18 +367,24 @@ keyword arguments.
 
 <property> ::= <identifier> "=" <expression>
 
-<expression> ::= <term> | <expression> "+" <term> | <expression> "--" <term>
+<expression> ::= <additive>
 
-<term> ::= <factor> | <term> "*" <factor> | <term> "/" <factor>
+<additive> ::= <term>
+  | <additive> "+" <term>
+  | <additive> "--" <term>
 
-<factor> ::= <primary> | "+" <factor> | "--" <factor>
+<term> ::= <factor>
+  | <term> "*" <factor>
+  | <term> "/" <factor>
+
+<factor> ::= <primary>
+  | "!" <factor> | "~" factor
+  | "+" <factor> | "--" <factor>
 
 <primary> ::=
      <integer-literal> | <string-literal> | <char-literal> | <identifier>
-\alt "<" <plain-type> ">"
-\alt "{" <c-fragment> "}"
-\alt "?" <s-expression>
-\alt "(" <expression> ")"
+\alt "<" <plain-type> ">" | "{" <c-fragment> "}" | "?" <s-expression>
+  | "(" <expression> ")"
 \end{grammar}
 
 \emph{Property sets} are a means for associating miscellaneous information