cofiprt / a3-s1-lfa-t2-subset-construction Goto Github PK
View Code? Open in Web Editor NEWPython program to convert a Non-deterministic Finite Automaton to a Deterministic Finite Automaton
Python program to convert a Non-deterministic Finite Automaton to a Deterministic Finite Automaton
--- LIMBAJE FORMALE SI AUTOMATE --- --- TEMA 2. Subset Construction --- ╦ ╔═╗╔═╗ ║ ╠╣ ╠═╣ ╩═╝╚ ╩ ╩ Cuprins: 1. Biblioteci...................................Linia 24 2. Modularizare.................................Linia 39 2.1. Clasa "DFA"............................Linia 43 2.2. Clasa "NFA"............................Linia 54 2.2.1. Metoda "initEpsilonClosures".....Linia 57 2.2.2. Metoda "convertToDFA"............Linia 68 2.3. Functia "validateInput"................Linia 93 2.4. Functia "main".........................Linia 100 3. Alte detalii.................................Linia 109 === ============= === === 1. Biblioteci === === ============= === Folosesc: * sys - Pentru acces la argumentele din linia de comanda * traceback - Pentru exception handling * typing: Set, Dict, Tuple - Pentru tiparea metodelor (type hints) === =============== === === 2. Modularizare === === =============== === --- ---------------- --- --- 2.1. Clasa "DFA" --- --- ---------------- --- Un obiect de acest tip reprezinta un DFA, cunoscandu-se starile, starile finale, alfabetul, si functia delta. Este overriden metoda "__str__" pentru a intoarce o reprezentare string a DFA-ului conform cerintei. --- ---------------- --- --- 2.1. Clasa "NFA" --- --- ---------------- --- --- 2.2.1. Metoda "initEpsilonClosures" --- Aceasta metoda initializeaza inchiderile epsilon pentru fiecare stare, realizand o singura parcurgere a NFA-ului. Astfel, ulterior se poate obtine in O(1) inchiderea epsilon a unei stari. Aceasta este o imbunatarie a implementarii cu o metoda "epsilonClosure" ce ar calcula, la apel, inchiderea epsilon a unei stari (lucru care se poate intampla din nou si ar avea acelasi rezultat) --- 2.2.2. Metoda "convertToDFA" --- Intoarce DFA-ul aferent obiectului de tip NFA. Definesc termenul "multi-state" drept o stare a DFA-ului rezultata din reuniunea mai multor stari ale NFA-ului. Se respecta urmatorul algoritm: - Multi-state-ul initial este inchiderea cu epsilon asupra starii initiale - Pentru fiecare multi-state neprocesat: - Pentru fiecare caracter al alfabetului (mai putin epsilon): - Se formeaza un nou multi-state ce reprezinta starile in care automatul poate ajunge, pornind din orice stare din multi-state-ul neprocesat, pe tranzitiile caracterului in cauza. Starile rezultate sunt inchise cu epsilon - Acest multi-state se adauga in coada de multi-state-uri neprocesate - Se stabilesc starile finale si se convertesc starile tranzitiilor din multi-state-uri in stari ale DFA-ului. Un multi-state este stare finala a DFA-ului daca acesta contine cel putin o stare finala a NFA-ului. Astfel, se intoarce DFA-ul generat --- ---------------------------- --- --- 2.3. Functia "validateInput" --- --- ---------------------------- --- Functie cu rol de sanity check --- ------------------- --- --- 2.3. Functia "main" --- --- ------------------- --- Se extrag informatiile necesare din fisierul de input (reprezentarea NFA-ului), dupa care se scrie solutia (reprezentarea DFA-ul convertit din acesta) in fisierul de output. === =============== === === 4. Alte detalii === === =============== === La conversia din NFA in DFA, structurile de date extra au roluri precum complexitate redusa (indexarea intr-un dictionar ale multi-state-urilor), sau implementare corecta (conversiile din set in frozenset, intrucat doar acesta din urma este hashable - aspect necesar pentru seturi/dictionare). Am ales, prin metoda "initEpsilonClosures" (Linia 57), sa calculez initial, printr-o singura parcurgere a NFA-ului, inchiderile epsilon pentru fiecare stare, intrucat acestea sunt necesare de mai multe ori pe parcursul conversiei in DFA dar ele nu se schimba.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.