Scripts that are called as the result of deterministic rules are treated differently by Maelstrom than the scripts to which such a rule applies.
A||B
or
A&&B
or A[B;C]
).
For example, the tree at the beginning of this paper, containing scripts A, B, C, D, E could be coded explicitly as:
A[1=>B[1=>C;0=>D[1=>E]]]or by realizing that
X[1=>Y]
is just X||Y
, more simply as:
A||B[1=>C;0=>D||E]In this case:
Using the []
syntax, very complex trees are possible,
though for simplicity any one script invocation can be assigned
only one set of actions. Writing the two declarations:
A || B A [ 1=>C ; 2=>D ]together is illegal, because there can only be one response to an invocation of A.
A Maelstrom command is parsed by first splitting it into phrases
separated by the precedence operator `:
'. These phrases
consist of a list of commands separated by `;
'. Each command
can optionally be associated with an action by use of the decision
operators `&&
', `||
', or []
, where the latter can
themselves contain lists of commands and associated actions. A
decision can appear after a command in any context, e.g.
A [ B [ C ; D ] ; E || F ] : G && His precisely equivalent to
A : G A [ B [ C ; D ] ; E || F ] G && Hand roughly equivalent to:
A : G A [ B ; E ] B [ C ; D ] E || F G && HIn the first two declarations there are two primary commands A and G, while in the last one the primary commands also include B and E (because they appear outside the context of a conditional command).