MDL Syntax
source_part ::=
type_def
| alias_def
type_def ::=
type_key identifier
{type_part}+
type_key ::=
"type"
| "syntax"
type_part ::=
attribute_part
| format_part
| value_part
| choice_part
attribute_part ::=
"attributes"
{field_def "," ...}+
field_def ::=
identifier
type_use
type_use ::=
identifier
| "integer"
| "real"
| "string"
| "boolean"
| "duration"
| "list" type_use
format_part ::=
{descriptor "," ...}+
descriptor ::=
descriptor_tag
{parameter}*
descriptor_tag ::=
identifier
| string
| char_choice
| option
char_choice ::=
"(" {char_choice_part "|"}+ ")"
char_choice_part ::=
identifier
| string
option ::=
"[" format_part "]"
parameter ::=
identifier
["=" parameter_value_list]
parameter_value_list ::=
parameter_value
| "(" {parameter_value "," ...}+ ")"
parameter_value ::=
integer
| identifier
| string
value_part ::=
"create_time" "=" function_body
"event_type" "=" attribute_ref
function_body ::=
identifier
{identifier "=" function_arg "," ...}*
function_arg ::=
attribute_ref
| string
attribute_ref ::=
{identifier "." ...}+
choice_part ::=
"choice"
{choice "," ...}+
choice ::=
identifier identifier
alias_def ::=
"aliases"
{alias_format "," ...}+
alias_format ::=
identifier
alias_data
{parameter}*
alias_data ::=
identifier
| string
| char_choice