CS 466/666 is an introduction to formal language and automata theory. In this course we will examine two methods for defining and recognizing languages: generating languages using grammars and accepting languages using finite state machines. Along with presenting the fundamentals of these two topics, the course will develop and investigate the relationships between these approaches. The focus will be two important families of languages, the regular languages and the context-free languages. We will exhibit the importance of the formal techniques by considering their application to the definition of programming languages and pattern matching. The text will be the second edition of Languages and Machines: An Introduction to the Theory of Compu...