The grammar rules for types are:
type:: boolean expr .. expr { atom,,atom } array expr .. expr of type atom ( expr,,expr )