Describir: Theories of programming languages