In this paper we examine source code annotations from the viewpoint of formal languages - we discuss their abstract syntax, concrete syntax, and semantics, thus showing the correspondence between annotations and formal languages. We propose to consider a set of all annotations and their parameters processed by the same reference implementation (they belong to the same domain) to be called an annotation-based language. The performed analysis also pinpoints a specificity of annotations in comparison with formal languages in general - the binding between annotations and a host language. We elaborate this idea with an analysis of annotations’ potential for language composition, in particular for pure embedding.We then show how pure embedding with annotations can be used for language unification, language referencing by extension, and language extension. This work provides a basis for further research in the field of source code annotations in the context of formal languages.