A study of the computational and linguistic theory on which the field of computer science is based. Topics include finite state automata, context-free grammars, push-down automata, Turing machines, undecidability, computability, and complexity theory.