This project is part of my Theory of Languages and Automata course. It covers foundational topics such as finite automata, regular languages, grammars, and pushdown automata. The project is divided into two parts: a half-term project and a final project, each containing multiple phases that explore different aspects of automata theory and formal languages.
The half-term project focuses on finite automata (FA) and regular languages. It is broken down into the following phases:
In this phase, we convert a Non-deterministic Finite Automaton (NFA) to a Deterministic Finite Automaton (DFA). The conversion involves constructing a DFA that accepts the same language as the NFA.
The DFA obtained from the first phase is simplified by removing unnecessary states and transitions, resulting in a minimal DFA that accepts the same language.
In this phase, the program checks whether a given string is accepted by the finite automaton (DFA or NFA).
We perform operations (such as union, intersection, complement) on regular languages and represent the resulting languages as finite automata.
This phase involves converting a finite automaton (FA) into an equivalent regular expression using Arden's Lemma.
The final project shifts focus to context-free grammars (CFGs) and pushdown automata (PDA), expanding the scope to include more complex computational models.
We verify whether a given string belongs to the language generated by a context-free grammar (CFG).
This phase involves checking whether a string is accepted by a Pushdown Automaton (PDA), a more powerful computational model compared to FA.
In this phase, we convert a Non-deterministic Pushdown Automaton (NPDA) into an equivalent Context-Free Grammar (CFG).