Repository progetto per materia Quality Developement.
Table of contents generated with markdown-toc
Si vuole realizzare un software in Python che implementi un riconoscitore a stati finiti deterministico (ASFD):
- Dato un certo file
XML
, si ricavi un ASFD$m$ (Automa a Stati Finiti Deterministico) rappresentato tramite un grafo diretto. - Che prenda in input un arbitrario numero di stringhe
$x$ . - Per ognuna delle suddette stringhe, tale script dovrà ritornare il risultato della computazione su
$m$ della suddetta stringa$x$ , dove con risultato della computazione si intende uno dei due seguenti risultati:- L'ASFD
$m$ accetta la stringa$x$ . - L'ASFD
$m$ non accetta la stringa$x$ .
- L'ASFD
Un ASFD è una quintupla:
-
$\Sigma= \{ a_0,a_1,...,a_n \}$ è l'alfabeto su cui lavora$m$ . -
$Q=\{q_0,q_1,...,q_k\}$ è l'insieme degli stati (nodi) di$m$ . -
$\delta:(Q\times\Sigma)\rightarrow Q$ è la funzione di transizione totale tra stati o alternativamente, la rappresentazione della matrice di adiacenza relativa al grafo grafo$m$ . -
$q_0\in Q$ è lo stato iniziale di$m$ . -
$F\subseteq Q$ è l'insieme degli stati finali di$m$ .
Sia
Sia
Sia
Alternativamente,
Sia
La computazione della stringa
let
let
let
for
if
else return
La funzione di transizione
Alternativamente, per ogni coppia di stato e carattere di transizione, deve sempre esistere sempre un arco per cui transitare.
La funzione
Il codice può essere testato in locale tramite lo script test.sh.
Questo script provvede ad eseguire quasi gli stessi comandi di test previsti nella pipeline di GitHub, eseguilo quindi sempre prima di eseguire il push del tuo codice nella repository (git push
): in questo modo non romperai la pipeline!