enumerantSpec  = { typeDefinition, ";" };
typeDefinition = typeName, kind, ":", equations;
kind           = "enum" | "mask" | "float" | "define";
equations      = [ equation, ",", { equation } ];
equation       = use | definition;
use            = "use", typeName, identifier;
definition     = identifier, [ "=", value ];
value          = reference | number;
reference      = "$", identifier, [ "+", number ];
number         = hexNumber | decNumber;
hexNumber      = ( "0x" | "0X" ), hexDigit, { hexDigit };
hexDigit       = digit | "a" | "b" | "c" | "d" | "e" | "f"
                       | "A" | "B" | "C" | "D" | "E" | "F";
decNumber      = digit, { digit };
digit          = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9";
typeName       = word;
identifier     = word - "use";
word           = wordChar, { wordChar };
wordChar       = character - (" " | punctuation );
punctuation    = ";" | ":" | "," | "=" | "+" | "$";
