At the very beginning of terms we have the unstructured variables
and atomic elements. The variables have already been defined as a
kind of words. Atomic elements are now atoms, numbers, negative
numbers and references. The names, the empty sets and the empty
lists are now found among the atoms. Among the structured terms we
will have compounds, lists and expressions:
term(N) --> variable
| atomic
| compound
| list
| expression(M) { M<=N }.
atomic --> atom
| number
| "-" number
| reference.
atom --> name
| "{" "}"
| "[" "]".
Examples:
X % is a variable and thus a term
foobar % is a name and thus a term
3.1415 % is a number and thus a term
-3 % is a negative number and thus a term
- 3 % is an expression, corresponds to -(3)
The grammatical production rules for terms can be viewed as stratified into levels. This is used later for parsing operator expressions. The levels range from 0 to 1200. Reading a term usually starts with level 1200. To disambiguate from operator expressions a negative number is only recognized when the minus ("-") directly precedes the first digit of the number.