Significato di NFA nella progettazione del compilatore

0

Mentre stavo studiando su Compiler Design ci dice che abbiamo bisogno di "automi finiti" mentre progettiamo un analizzatore lessicale come DFA o NFA. Quindi vorrei sapere se NFA è usato solo per la conversione di (espressioni regolari in NFA e poi in DFA). È possibile realizzare NFA praticamente? O se NFA è usato perché è efficiente di DFA?

    
posta justin 15.11.2014 - 09:10
fonte

1 risposta

1

Realizzare un NFA in pratica significa fare un backtracking, dal momento che il flusso del programma non può essere simultaneamente in più stati diversi. (Esistono processori paralleli, ovviamente, ma è difficile mappare il comportamento irregolare e caotico delle espressioni regolari scritte dall'utente al flusso di dati regolare e diretto per cui sono state progettate le unità di vettorizzazione.) Pertanto, per decidere un puro "Questa corrispondenza? " domanda, è quasi sempre meglio trasformare ulteriormente la NFA in un DFA ed eseguirlo. Tuttavia, gli NFA sono ancora utilizzati in pratica perché i DFA non possono fare alcune cose che gli utenti desiderano, come catturare sottogruppi di un'espressione.

    
risposta data 15.11.2014 - 13:34
fonte

Leggi altre domande sui tag