The purpose of this course is to provide students with the concepts of formal languages, automata theory, and computational complexity. The topic is as follows: 1. Automata: The Methods and the Madness 2. Finite Automata 3. Regular Expressions and Languages 4. Properties of Regular Languages 5. Context-Free Grammars and Languages 6. Pushdown Automata 7. Properties of Context-Free Languages 8. Introduction to Turing Machines 9. Undecidability 10. Intractable Problems