declarations ::= declaration ::= | | | type_decl ::= "type" ";" enum_decl ::= "enum" "{" "}" | "enum" "{" "}" enum_members ::= ["," ]+ [","] enum_member ::= "=" struct_decl ::= "struct" "{" "}" | "struct" "{" "}" struct_members ::= | "," | "," | "," protocol_decl ::= "protocol" "{" "}" | "protocol" "{" + "}" protocol_member ::= "fn" "("[]")" "->" ";" arg_list ::= ["," ]+