Conversione diretta ed inversa tra automi a stati non definiti (nfa) ed espressioni regolari
1. Conversione diretta ed inversa tra automi a stati
non definiti (NFA) ed espressioni regolari
FACOLTÀ DI INGEGNERIA
Tesi di Laurea in
INGEGNERIA INFORMATICA
Relatore: Prof. Eric Medvet
Correlatore: Dott. Andrea De Lorenzo
Candidato: Paolo Oltramonti
2. Oggetto della tesi
Sviluppare un algoritmo che effettua la conversione diretta ed
inversa tra automi a stati finiti non deterministici (NFA) ed
espressioni regolari
NFA
ESPRESSIONE
REGOLARE
ESPRESSIONE
REGOLARE
NFA
4. Scenario
Il progetto si colloca nell’ambito di una ricerca di alto livello su:
Generazione automatica di pattern a partire da esempi
b[A-Z0-9._%+-]+
5. Scenario
Si sono esplorate due strade
1. Le NFA
2. Le espressioni regolari
b[A-Z0-9._%+-]+
che si sono rivelate entrambe interessanti
6. Cos’è una NFA
Una NFA è un automa a stati finiti
Un automa è un modello che permette di descrivere con precisione
e in maniera formale il comportamento di un sistema
7. Cos’è una NFA
Distinguiamo due importanti tipi di automi a stati finiti
automi a stati finiti
non deterministici (NFA)
automi a stati finiti
deterministici (DFA)
8. Cos’è un espressione regolare
Un’espressione regolare è un formalismo che permette di
descrivere un insieme di stringhe
Un’espressione regolare è un linguaggio regolare
Un’espressione regolare definisce una funzione che prende in
ingresso una stringa, e restituisce in uscita un valore booleano,
a seconda che la stringa aderisca o meno al pattern
9. Cos’hanno in comune NFA e Regex
Sono dei pattern
Riconoscono un linguaggio regolare
Un linguaggio regolare può essere rappresentato
con entrambe le rappresentazioni
10. Quali sono le differenze
Le espressioni regolari hanno il vantaggio di essere utilizzate
negli editor di testo
Quindi hanno una maggiore utilità rispetto alle NFA
11. Quali sono le differenze
I tempi di esecuzione:
NFA dipendono linearmente dalla lunghezza dell’input
Espressioni regolari dipendono anche dalla complessità
13. Perché convertire
Per beneficiare dei vantaggi di entrambi gli approcci è
necessario sviluppare una metodologia per convertire da
espressioni regolari ad NFA e viceversa
ab*b|aa*a
15. Approccio al problema
Per effettuare le conversioni si sono identificati ed implementati
degli algoritmi noti
Algoritmo di creazione dei sottoinsiemi per la
conversione da NFA ad espressione regolare
Algoritmo di Thompson per la conversione da
espressione regolare ad NFA
16. Vincoli di progetto e tecnologie
1. Linguaggio di programmazione Javascript
2. Codifica NFA preesistente in oggetti JSON:
L’algoritmo si deve integrare con un software preesistente
17. Realizzazione: NFA => Regex
Algoritmo di creazione dei sottoinsiemi
NFA => DFA
DFA => GNFA
GNFA => Regex
18. NFA => Regex
Esempio di conversione da NFA ad espressione regolare
NFA
GNFA
DFA
Regex
ab|cd
20. Regex => NFA
Esempio di conversione da espressione regolare a NFA
Regex
Sottoexp
r1=ab
ab|cd
r2=cd
r3=r1|r2
Blocchi NFA
NFA
21. Test
L’implementazione è stato testata su:
• 50 espressioni regolari
• 50 NFA
Tutte le conversioni dirette ed inverse sono state
testate con successo