The expressions that may appear as the right-hand-sides of DATR\
equations are sequences of zero
or more descriptors.
Descriptors are defined recursively, and come in seven kinds.
The simplest descriptor is just an atom or variable:
atom1
$var1
Then there are three kinds of local inheritance descriptor: a node, an (evaluable) path, and a node/path pair. Nodes are primitive tokens, paths are descriptor sequences (defined below) enclosed in angle brackets and node/path pairs consist of a node and a path separated by a colon:
Node1
<desc1 desc2 desc3 ...>
Node1:<desc1 desc2 desc3 ...>
Finally there are three kinds of global inheritance descriptor, which are quoted variants of the three local types just described:
"Node1"
"<desc1 desc2 desc3 ...>"
"Node1:<desc1 desc2 desc3 ...>"
A descriptor sequence is a (possibly empty) sequence of descriptors.
The recursive definition of evaluable paths in terms of
descriptor sequences allows arbitrarily complex expressions to be
constructed, such as
:
"Node1:<"<atom1>" Node2:<atom2>>"
"<"<"<Node1:<atom1 atom2> atom3>" Node2 "<atom4 atom5>" <> >">"
But the value sequences determined by such definitions are flat: they
have no structure beyond the simple sequence and in particular do not
reflect the structure of the descriptors that define them.
We shall sometimes refer to descriptor sequences containing only atoms as simple values, and similarly (unquoted) path expressions containing only atoms as simple paths.
