Notation

This section briefly explains the meta syntax constructs used in various parts of the language documentation.

Note

  • The notation is not strictly formal, but hopefully descriptive enough to be useful in practice.
  • A complete grammar specification may be added later.

The TethysL grammar is defined as a set of rules.

Each rule is defined by a ⟨name⟩ and the corresponding syntax structure, which itself is defined in terms of other rules and/or explicit strings that stand for themselves.

For example, the rule for mission is as follows:

⟨mission⟩ syntax

mission ⟨id⟩? {
  ⟨testCode⟩?
  ⟨description⟩?
  ⟨defineArgs⟩?
  ⟨defineOutput⟩?
  ⟨break⟩?
  ⟨timeout⟩?
  ⟨behavior⟩*
}

A string without enclosing ⟨⟩ characters stands by itself. In this case, mission is a keyword in TethysL to denote the start of a mission definition.

The ? symbol indicates the element is optional, that is, it can occur zero or one time. In a mission, there are various elements that are optional, for example, ⟨id⟩? indicates that the mission ID is optional.

The * symbol indicates the element can occur zero or more times. In the example, ⟨behavior⟩* indicates that mission can have zero or more behaviors.

Other notation used in the grammar is grouping of elements using ... . For example, in the rule for moduleBehavior:

⟨moduleBehavior⟩ syntax

behavior ⟨moduleName⟩:⟨behaviorName⟩   id = "someId" ⟧? {
  ⟨description⟩?
  ⟨executionMode⟩
  ⟨break⟩?
  ⟨timeout⟩?
   ⟨behaviorChoice1⟩ | ⟨behaviorChoice2⟩ ⟧*
}
  • id = "someId" ⟧? indicates that assigning an ID to the module behavior is optional, and that, if given, must have the syntax id = "someId".

  • ⟨behaviorChoice1⟩ | ⟨behaviorChoice2⟩ ⟧* indicates that there can be multiple choices for each setting in the body of a module behavior, with each choice being of the alternative forms as indicated by the two rules ⟨behaviorChoice1⟩ and ⟨behaviorChoice2⟩, which are separated with the | operator (which means or).

In general, any rule name ⟨name⟩ or grouping ... that appears in the syntax descriptions:

  • is optional if followed by ?
  • can occur zero or more times if followed by *
  • can occur many times (at least one) times if followed by +
  • is required otherwise.