Expressions allways works on a list of values, although, usually, it will be one (1) value. The principle that everything works on a list is simple, yet profound. There is a slight risc of loosing sight of complexity, but it allows a rather wide range of solutions.
expression-label ::= label format ::= identifier label-expression ::= expression-label [s] spec expression list-content ::= label-expression [[s] sep label-expression]... | expression [[s] sep expression]... | expression-list ::= list-start list-content [s] list-end
sub-select ::= expression-list | [ expression ] variable ::= identifier [sub-select]... [its variable | all] value ::= variable | ( lit-integer | lit-real | lit-complex | lit-nan) [[s] unit-label] | lit-text
Nota Bene: the terms dyadic-symbol and unary-symbol are not defined. See Elements for the use and meaning of symbols and their relative priority.
uni-expr ::= value | unary-symbol [s] uni-expr expression ::= uni-expr [[s] dyadic-symbol [s] uni-expr ]...