A language for defining the syntax and semantics of programming languages.