In this chapter, we characterize the notion of “software language” in a
broad sense. We begin by setting out diverse examples of programming, modeling,
and specification languages to cover a wide range of use cases of software languages in software engineering. Then, we classify software languages along multiple dimensions and describe the lifecycle of software languages, with phases such as
language definition and implementation. Finally, we identify areas in software engineering that involve software languages in different ways, for example, software
reverse engineering and software re-engineering.