This course explores the theoretical foundations of computer science. Topics include finite state automata and regular languages, context-free grammars, pushdown automata and context-free languages. Turing Machines and recursively enumerable sets, computability and the halting problems, Chomsky hierarchy and undecidable problems. Prerequisites: CS 250 - Algorithms and Problem-Solving II and CS 275 - Mathematical Foundations of Algorithms.