- upper-case text stands for keywords or base types;
- lower-case text stands for rule names;
- the first square brackets [...] for a rule only delimit the
description of the rule;
- the second square brackets (inside a rule description) [...]
represent optional elements;
- curly brackets {...} represent zero, one or several repetitions
of the enclosed element;
- pipes | represent alternatives for a rule;
- usual brackets (...) are used inside a rule for sub-alternatives;