No side effects, no surprises.

Syntactic rules

Objects are defined using statements that follow a regular set of syntactic rules. Briefly these include:

  • Only one statement can occur per line, and each statement is fully expressed in that single line. There are no multi-line statements, and there is no line continuation symbol.
  • Comments can occur on any line. The start of a comment signals the end of the statement. There are no embedded comments.
  • There are two broad types of statements: namespace-object scoping statements, and keyword-value definition statements.
  • Namespace names and object names may be of any length and may be composed of any Unicode character except these[ ] : . # = |
  • Keyword names may be composed only of the 63 characters in the seta-z A-Z 0-9 _ (the alphanumerics plus the underscore).
  • Scoping statements use hard brackets[] to surround the namespace-object name, and a colon: to separate the namespace from the object.
  • Definition statements use an equals sign= to assign values to a keyword.
  • Keywords that have scalar values (single values) are expressed using the simple assignment operator= .
  • Keywords that have sets of values (arrays) are expressed with concatenation, using either a pipe| or a piped assignment operator|= .
  • Keyword values may be referenced through variables, where the variable name is composed of a namespace, object, and keyword, prefixed with a dollar sign $.
  • Single quotes and double quotes are not specially interpreted and have no syntactic meaning. They are always passed through to the interpreter as is.
  • String values begin with the first non-whitespace character and end with the last non-whitespace character. Values cannot be expressed with leading or trailing spaces. A value consisting solely of a string of space characters is not possible.