<!--
  - Author:
  -   Leif Kornstaedt <kornstae@ps.uni-sb.de>
  -
  - Copyright:
  -   Leif Kornstaedt, 1996-1998
  -
  - Last change:
  -   $Date: 1999/08/03 12:08:32 $ by $Author: kornstae $
  -   $Revision: 1.8 $
  -
  - This file is part of Mozart, an implementation of Oz 3:
  -   http://www.mozart-oz.org
  -
  - See the file "LICENSE" or
  -   http://www.mozart-oz.org/LICENSE.html
  - for information on usage and redistribution
  - of this file, and for a DISCLAIMER OF ALL
  - WARRANTIES.
  -
  -->

<Appendix id="appendix.notation">
  <Title/The Used Notation/
  <P>
    This appendix describes the notation used to specify the syntax of the
    Gump specification language as an extension of the &Oz; language.  It is
    an extended Backus-Naur-Formalism built from the following parts:
    <List>
      <Item>
	terminals and nonterminals are enclosed in angle brackets
	&lt;&ellipsis;&gt;;
      <Item>
	the left side is separated from the right side by either ::= or
	+=, where += adds productions to an existing nonterminal;
      <Item>
	the vertical bar separates alternatives;
      <Item>
	square brackets denote optional phrases;
      <Item>
	curly braces enclose phrases that may be repeated 0 to <Var
	type=meta>n</Var>&nbsp;times;
      <Item>
	curly braces with a suffixed&nbsp;+ enclose phrases that may be
	repeated 1 to <Var type=meta>n</Var>&nbsp;times;
      <Item>
	literal strings are typeset in <Code>this way</Code>.
    </List>
  <Section>
    <Title/Elements from the Oz Syntax/
    <Para class=apropos><Title/Lexical Conventions/
      Since the tool's specification language is embedded into &Oz;, the same
      lexical conventions apply as for &Oz;.  The only additional terminal
      type is ?={regex}, described in <Ptr to="section.scanner.syntax">.
    <Para class=apropos><Title/Terminals/
      The following named terminals from the Oz syntax are used:
      <List>
	<Entry>?={atom}
	<Item>
	  stands for an &Oz; atom (quoted or not).
	<Entry>?={variable}
	<Item>
	  denotes an &Oz; variable (backquoted or not).
	<Entry>?={atom label}
	<Item>
	  is an &Oz; atom that is immediately followed by a left parenthesis.
	<Entry>?={variable label}
	<Item>
	  is an &Oz; variable that is immediately followed by a left
	  parenthesis.
      </List>
      See <Ptr.Extern to="ozdoc:notation"> for the exact definitions.
    <Para class=apropos><Title/Nonterminals/
      Furthermore, the following nonterminals from the &Oz; syntax are used:
      <List>
	<Entry>?={statement}
	<Item>
	  is an &Oz; statement.
	<Entry>?={expression}
	<Item>
	  is an &Oz; expression.
	<Entry>?={in statement}
	<Item>
	  is an &Oz; statement with optional preceding variable declaration.
	<Entry>?={in expression}
	<Item>
	  is an &Oz; expression with optional preceding variable declaration.
	<Entry>?={class descriptor}
	<Item>
	  stands for a class descriptor, &ie;, one of <<from>>, <<prop>>,
	  <<attr>> or <<feat>>.
	<Entry>?={method}
	<Item>
	  stands for a <<meth &ellipsis; end>> definition.
      </List>
      See <Ptr.Extern to="ozdoc:notation"> for the exact definitions.
</Appendix>
