ANTLR è uno strumento appropriato per serializzare / deserializzare un formato di dati binario?

StackOverflow https://stackoverflow.com/questions/517004

Domanda

Ho bisogno di leggere e scrivere i flussi ottetto di inviare più diverse reti per comunicare con i contatori elettrici intelligenti. V'è uno standard ANSI, ANSI C12.19, che descrive il formato di dati binari. Mentre il formato dei dati non è eccessivamente complesso lo standard è molto grande (500+ pagine) in quanto descrive molti tipi distinti. Lo standard è descritto da una grammatica EBNF. Sto considerando l'utilizzo ANTLR a leggere la grammatica EBNF o una versione modificata di esso e creare classi C # in grado di leggere e scrivere il flusso di ottetto.

E 'questo un buon uso di ANTLR?

Se è così, che cosa devo fare per essere in grado di utilizzare ANTLR 3.1? Dalla ricerca negli archivi dei newsgroup sembra che ho bisogno di implementare un nuovo flusso in grado di leggere i byte invece di caratteri. È tutto o avrei dovuto implementare un derivato Lexer così?

Se ANTLR può aiutarmi a leggere / analizzare il flusso può anche aiutarmi a scrivere il flusso?

Grazie.

dan Finucane

È stato utile?

Soluzione

Questo tema viene di volta in volta sul ANTLR mailing list. La risposta è di solito no, perché i formati di file binari sono molto regolari ed è solo che non vale l'overhead.

Altri suggerimenti

Si potrebbe dare un'occhiata a Ragel . Si tratta di una macchina a stati compilatore / lexer che è utile per l'implementazione dei protocolli on-the-wire. Ho letto i rapporti che essa genera codice molto veloce. Se non avete bisogno di un motore di parser e template, Ragel ha meno overhead di ANTLR. Se avete bisogno di un parser in piena regola, AST, e piacevole supporto motore template, ANTLR potrebbe essere una scelta migliore.

Mi sembra che avere una grammatica ti dà una gamba enorme up.

ANTLR 3.1 ha StringTemplate e generazione di codice caratteristiche che sono separati dal parsing / lexing, in modo da poter scomporre il problema in questo modo.

Sembra come un vincitore per me, vale la pena provare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top