The course covers topics on grammar, finite automaton, regular expression, formal language, pushdown automaton, and Turing machine. These topics form basic models of computation and are the foundation of many branches of computer science like the compiler, software engineering, and concurrent systems. The properties of these models and various techniques for analyzing and comparing them will be studied and discussed by using both formalism and examples. The course requires a strong background in the fundamentals of discrete mathematics, data structures, and algorithms. Knowledge of programming languages, programming, and computer architecture will also be helpful.