Formal study of how programming languages are described, type-checked, compiled, and given meaning. Spans syntax (parsers), semantics, type systems, optimisations, and code generation.