Prima di rispondere alle tue domande, permettimi innanzitutto di dire che esistono due classi principali di linguaggi informatici:
-
Lingue normali : la maggior parte dei file di registro segue questo formato. Ogni riga è un'espressione completa e può essere analizzata separatamente. In sostanza, tutte le tue esigenze possono essere soddisfatte solo da un lexer o da espressioni regolari.
-
Lingue sintattiche : esiste una grammatica specifica e regole che circondano ciò che rende la sintassi corretta (o la struttura della frase). La maggior parte dei linguaggi di programmazione e persino alcuni linguaggi di marcatura seguono questo formato. Essenzialmente hai bisogno sia di un lexer che di un parser.
Se è necessario analizzare i file di registro, è probabile che si riesca a leggerli riga per riga e utilizzare un'espressione regolare per ottenere i campi. Se la linea di log è molto semplice, puoi facilmente far girare il parser ed evitare la sintassi delle espressioni regolari. Ho fatto entrambi gli approcci ed è un lavoro abbastanza veloce.
Se hai bisogno di qualcosa di un po 'più robusto, puoi usare ANTLR, Flex, Yacc, ecc. a seconda delle esigenze della tua piattaforma. Comprendi che ANTLR, pur essendo uno strumento Java, può generare codice C / C ++ e C # così come codice Java.
Ora per le tue domande una per una:
-
È legale? Assolutamente. La maggior parte dei generatori di parser inserisce esplicitamente nelle proprie licenze che la licenza non si applica al codice generato. Se il codice sorgente è proprietario, lo è anche il codice generato che proviene da esso.
-
Ho solo paura di scrivere il mio parser? Solo tu puoi rispondere. Tuttavia, il buon senso dice che se c'è uno strumento che ti aiuti a risparmiare tempo ed evitare errori, dovresti probabilmente usarlo. Tanto più se non costa soldi extra. Assicurati che lo strumento scelto corrisponda al lavoro. Se tutto ciò che devi analizzare è una lingua normale, non optare per i generatori di parser completi.
-
Yacc e Lex su Windows? Puoi usare un'alternativa come ANTLR , oppure puoi usare Cygwin strumenti basati, o Bumble-Bee port. Hai opzioni.