The third edition of Languages and Machines: An Introduction to the Theory of Computer Science provides readers with a mathematically sound presentation of the theory of computer science at a level suitable for junior and senior level computer science majors. The theoretical concepts and associated mathematics are made accessible by a "learn as you go" approach that develops an intuitive understanding of the concepts through numerous examples and illustrations. In this edition the presentation has been enhanced by increasing the number of examples, expanding the selection of topics particularly in the area of computational complexity, and providing a flexible format giving instructors the ability to design their courses that concentrate on specific areas such as automata theory, computability theory, or computational complexity.