1.2.1 Metalanguage  
A metalanguage describes another language or some aspect of another language. Some metalanguages for compiler parts are well known.  Regular expressions  can describe tokens, and  Backus-Naur form  (BNF) can describe the syntax of a programming language. When we add attributes and semantic functions to BNF, creating an  attribute grammar , we can describe the semantics of a programming language, as well as the syntax. 
Some metalanguages can be used to describe themselves. The term  unstratified  refers to the self-description property of a metalanguage. A good metalanguage is unstratified.     
 Properties of Good metalanguages