A superlanguage offers the following features:
- Concrete syntax processing. Such a feature must allow new language constructs to be defined.
- First-class language modules. Language definitions should be data values, subject to normal scoping rules, parametric etc.
- Meta-Programming. Arbitrary computations can be performed when processing syntax in order to process declarative language constructs.
- Access to the abstract syntax ADT of host programming language that can be used to construct and transform arbitrary programs.
- Control over the scope of languages so that, once defined, a new language feature can be placed in scope for a given extent of program text.
- The ability to construct recursive definitions including those that involve grammars and language constructs.