This course aims to provide students with a fundamental understanding of formal languages, automata theory, and their applications in computer science and related fields. Here are the objectives of this course:

- Understand the concept of formal languages, including regular languages, context-free languages, and context-sensitive languages

- Identify different formal language classes and their relationships.

- Understand regular languages and their properties.

- Learn to work with regular expressions for pattern matching and text processing.

- Design grammars and recognizers for different formal languages.

- Learn how to define and represent formal languages using formal grammars.

- Study finite automata, pushdown automata, and Turing machines as computational models.

- Explore the relationships between different types of automata and the languages they recognize.

Level: L2