Notation for abstract syntax definition. Defines a number of primitive types with their tags and specifies a notation for referencing these types and for specifying values of these types. Also defines mechanisms for constructing new types from more basic types.