2012-01-27 27 views
5

A volte, sarebbe conveniente avere una funzione altamente ottimizzata per la ricerca regex invece di includere una libreria che genera parser in fase di esecuzione. Esiste un generatore di parser adatto a un ruolo simile?Generatore di parser di espressioni regolari

Idealmente, sarebbe:

  • creare una singola funzione C
  • generare un DFA corrispondente alla data espressione regolare
  • ed efficienza KMP o Boyer-Moore in casi semplici

risposta

6

Ecco elenco degli strumenti che tutto adatto alle vostre esigenze:

  1. Lex/Flex è forse il lo strumento più conosciuto per la costruzione di parser da espressioni regolari. Lex è utile in molti scenari ma può imporre un sovraccarico eccessivo per le semplici applicazioni di analisi a causa del ciclo di elaborazione dei pesi massimi che impone un modello "pull" del flusso e il buffering dell'input. È stato progettato per analizzare interi file anziché semplici stringhe.

  2. . È un pre-processore che genera i riconoscimenti basati su C dalle espressioni regolari. Le macchine a stati generati funzionano molto velocemente e si integrano facilmente in qualsiasi programma, senza dipendenze.

  3. Ragel State Machine Compiler. Un altro pre-processore che genera codice FSM da notazione di linguaggio regolare di alto livello (l'espressione regolare è un caso di questa definizione). Funziona per una gamma di linguaggi (C, C++, Objective-C, D, Java e Ruby), può eseguire azioni dell'utente su diversi eventi FSM, ecc. Inoltre, può generare la definizione della macchina di stato in formato Graphviz per la visualizzazione di stati e transizioni.

5

Lex e Flex sono in realtà compilatori regexp-to-C.

+0

In qualche modo, ho pensato a loro come esclusivamente tokenizer. –