Linguaggi&Traduttori da espressione regolare ad automa N

DandiDoc
Salve a tutti, sono nuovo del forum e vorrei innanzitutto farvi i complimenti!!!
Arrivo subito al dunque...Il mio problema è il seguente: sto preparando l'esame di linguaggi e traduttori e mi sono imbattuto nelle espressioni regolari. Non riesco a capire come procedere quando mi viene chiesto di determinare l'automa corrispondente ad una espressione regolare. Ho passato due ore a costruire l'automa deterministico per l'espressione (b*a(a*|b)a*b)* ovviamente senza risultati! La soluzione mi mostra un automa NFA :cry: Allora mi chiedo, esiste un modo per capire dall'espressione regolare se bisogna costruire un automa deterministico o uno non (con epsilon produzioni) ? Vi ringrazio in anticipo!!!

Risposte
Deckard1
Non ho ben capito: come fai a costruire l'automa dall'e.r.? Esiste un algoritmo preciso, che è poi quello che viene utilizzato nella dimostrazione del teorema di Kleene (almeno per come l'ho studiata io). Applicandolo ad un'e.r. qualsiasi ottieni un automa che non è detto sia deterministico. Se poi vuoi costruire un DFA esiste un altro algoritmo che ti permette di farlo a partire dal NFA corrispondente.

DandiDoc
Grazie per la risposta. Io però volevo sapere se osservando un'espressione regolare fosse possibile capire che tipo di automa costruire (DFA o epsilon-NFA).

Deckard1
Entrambi. Il DFA è un caso particolare di NFA e dall'NFA puoi costuirti un DFA equivalente. Quindi non capisco proprio quale sia il senso di questa domanda.

DandiDoc
Allora. Ho fatto questa domanda perchè gli esercizi di esame sono svolti sia con epsilon-NFA che con DFA e non capisco perchè in alcuni casi predilige i primi piuttosto che i secondi. So benissimo che cos'è un NFA e un DFA. E poi il teorema di Kleene prevede tre tesi da dimostrare con tre algoritmi: dalle grammatiche agli automi, dagli automi alle grammatiche e dagli automi alle ER. No dalle ER agli automi (che è quello chiedo io) :!:

Deckard1
Non so perchè gli esercizi siano svolti costruendo a volte un NFA e a volte un DFA. Tuttavia esiste un algoritmo per costruire l'epsilon-NFA a partire dalla e.r.. Lo conosci?
Costruito l'automa non deterministico se poi ti è richiesto puoi benissimo costruirti il DFA corrispondente.

EDIT: in effetti sulla dimostrazione del teorema di Kleene hai ragione tu: l'algoritmo non viene utilizzato, tuttavia il teorema afferma che è la costruzione di un automa equivalente all'e.r. è possibile.

DandiDoc
Ma scusa :shock: Se te lo sto chiedendo io questo algoritmo!!! :-k

Deckard1
Non mi era chiaro se lo conoscevi o no visto che la tua domanda era sull'automa ottenuto se deterministico o no e non capivo che senso avesse.
Comunque, l'algoritmo è questo: decomporre in blocchi l'espressione, costruire l'NFA che riconosce quel blocco (espressioni semplici hanno NFA semplici quindi non è difficile) e concatenare poi tramite epsilon-transizioni i vari blocchi.
Guarda l'es. 4 (e la spiegazione soprastante) di queste esercitazioni trovate sul web http://corsi.deis.unical.it/OLD/linguag ... ione3B.pdf

DandiDoc
OK! Grazie! Ora mi sapresti dire quando si usa un epsilon-NFA piuttosto che un NFA?

Rggb1
"DandiDoc":
OK! Grazie! Ora mi sapresti dire quando si usa un epsilon-NFA piuttosto che un NFA?

Uhu? Che intendi "quando" si usa?

DandiDoc
Quando hai un'espressione regolare, come fai a sapere se costruire un automa NFA piuttosto che un automa epsilon-NFA? C'è una qualche regola?

Rggb1
Non sempre un NFA riconosce una regex, mentre un NFA con transizioni vuote (nulle, epsilon-transizioni) sì.

PS. Qualcuno ti ha detto (o hai letto da qualche parte) di usare (costruire) un NFA invece di un e-NFA per le regex? Strano... forse per esercizio?

DandiDoc
Si tratta di esercizi presi da prove di esame in cui mi viene chiesto di determinare un automa data da una certa espressione regolare...a volte la soluzione consiste in NFA e a volte in e-NFA. Allora mi è venuto il dubbio se per caso ci fosse un qualche meccanismo con cui capire quale dei due è la soluzione migliore. Quindi se costruisco un e-NFA vado sempre sul sicuro, tanto lo devo convertire in DFA, vero? Ti ringrazio :D

Rggb1
Ma non capisco: usi una procedura differente per costruire gli automi NFA (rigorosamente SEMPRE senza e-trans) ed epsilon-NFA? Credo di no; fra l'altro l'algoritmo è sempre il solito.

Come ti ha già spiegato Deckard, è un metodo semplice (ti ha postato un link, non l'ho letto ma sarà come gli altri che ci sono nei vari corsi universitari).

E quindi, direi siamo in presenza di un semplice "misunderstood", se come dici la soluzione "a volte è un e-NFA, a volte è un NFA"; non devi distinguere i due tipi (NFA da e-NFA): se costruisci un e-NFA che, guarda caso, non ha transizioni vuote, ottieni un NFA. ;)

[nota: sarò fatto male ma io per l'automa del riconoscimento delle regex parto sempre prima dal DFA :-D]

DandiDoc
Scusami, ma come fai a partire sempre da un DFA? Ci sono casi in cui non è possibile...non per niente i grafo delle equivalenze relativo alla rappresentazione dei linguaggi regolari è questo http://img825.imageshack.us/img825/1033 ... a11105.png
[/img]

Rggb1
Abbiamo chiarito il punto precedente, ovvero che non ha senso distinguere NFA da e-NFA.

Anzi, essi sono "equivalenti" nel senso che puoi sempre trasformare un NFA in un e-NFA e viceversa, e anche in un DFA. E quindi
"DandiDoc":
Scusami, ma come fai a partire sempre da un DFA? Ci sono casi in cui non è possibile...

questa affermazione sicuramente non è corretta. Infatti se hai una regex puoi sempre costruire il DFA che la riconosce.

Intendi forse dire che non riesci a costruirlo direttamente? Però questa è una cosa diversa.

DandiDoc
Siccome odio assai :? questa materia ti prego di sopportare le mie domande :oops:
"Indirettamente" perchè il DFA è l'ultimo automa che si potrebbe ottenere...non si è obbligati a passare da un NFA(o da un e-NFA)? Avevo solo risposto a quanto avevi scritto "[nota: sarò fatto male ma io per l'automa del riconoscimento delle regex parto sempre prima dal DFA ]"

Rggb1
"DandiDoc":
Siccome odio assai :? questa materia ti prego di sopportare le mie domande :oops:

Figurati ;)

"DandiDoc":
"Indirettamente" perchè il DFA è l'ultimo automa che si potrebbe ottenere...non si è obbligati a passare da un NFA(o da un e-NFA)? Avevo solo risposto a quanto avevi scritto "[nota: sarò fatto male ma io per l'automa del riconoscimento delle regex parto sempre prima dal DFA ]"

Avevo capito, e no: non si è "obbligati a fare un NFA", ma normalmente si fa così perché questo è più semplice (ovvero in generale ha meno stati/transizioni del DFA).

Io però trovo facile anche applicare prima il determinismo e poi semplificare l'automa ottenuto in un NFA. Boh, è questione di metodo.

PS. Per esercitarti, se già non lo hai, per queste materie ti consiglio ti usare JFLAP
http://www.cs.duke.edu/csed/jflap/

DandiDoc
:wink: Ti ringrazio!!! Speriamo di riuscire a passare sto benedetto esame! Un saluto :smt039

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.