syntax ::= header[ class ...]

name ::= <\w>+

column_name ::= {<\w>+|<[><^[]>+<]>}

type ::= name [<\<> template_list <\>>]

type_definition ::= name [<\<> args_list <\>>]

args_list ::= name [, name ...]

db_type ::= <\w>+[(<\d>+[,<\d>+])]

template_list ::= type[, type ...]

mapping ::= column_name [as db_type]

property ::= type name[ =<\>> mapping]

comment ::= #<^\n>*<\n>[ #<^\n>*<\n>...]

property_list ::= property ; [comment] [property ; [comment] ...]

base_types ::= type [, type ...]

value_type ::= value

class ::=
[comment][value_type ]type_definition [: base_types] <{>
    [comment]
    [property_list]
<}>

header_value ::= {*<^;>+ {;<\n>| header_value}|<^\n>+[;]}

header_prop ::= name = header_value

file_name ::=<\w./>+

include_item ::= include ( file_name )[;]

header ::=[ {header_prop|include_item} ...]