Understand fundamental classes of formal languages and computational models and the relationship between them, reason about and prove properties of different language classes, understand limitation of computational process, prepare students for subsequent courses in algorithms, complexity theory, programming languages, and compilers.