Several modern languages are used to illustrate course topics. Finite and pushdown automata and the classes of languages which they recognize occupy the first part of the course. The remainder of the course addresses Turing machines, recursive functions, Church's Thesis, undecidability, and NP-completeness. This course may be used as a major elective by mathematics majors and minors. The lexical analysis, parsing, code generation, and optimization of programs written in a block-structured language are used to illustrate many concepts from earlier courses.
Students implement a translator for a subset of a well-known programming language.
Also considers efficiency and security issues, as well as the relationship between machine architecture and system software design.