Sto cercando un buon generatore di parser che possa essere utilizzato per leggere un formato di file di testo personalizzato nella nostra grande app commerciale. Attualmente questo particolare formato di file viene letto con un parser ricorsivo fatto a mano, ma il formato è cresciuto e complessificato al punto in cui tale approccio è diventato ingestibile.Il generatore di parser ANTLR è il migliore per un'applicazione C++ con memoria vincolata?
Sembra che la soluzione definitiva sarebbe quella di creare una grammatica corretta per questo formato e quindi utilizzare un generatore di parser reale come yacc per leggerlo, ma ho difficoltà a decidere quale generatore utilizzare o anche se sono " vale la pena il problema. Ho esaminato ANTLR e Spirit, ma il nostro progetto ha vincoli specifici oltre earlier answers che mi fanno chiedere se sono appropriati per noi. In particolare, ho bisogno di:
- Un parser che genera codice C o C++ con MSVC. ANTLR 3 non supporta C++; sostiene di generare una C diritta, ma i documenti su come farlo funzionare effettivamente sono un po 'confusi.
- Utilizzo della memoria gravemente limitato. La memoria ha un enorme vantaggio nella nostra app e anche minuscole perdite sono fatali. Devo essere in grado di sovrascrivere l'allocatore di memoria del parser per usare il nostro malloc() personalizzato, o per lo meno ho bisogno di dargli un pool contiguo da cui attinge tutta la sua memoria (e che posso deallocare in blocco in seguito). Posso risparmiare circa 200kb per l'eseguibile del parser stesso, ma qualunque heap dinamico che assegna all'analisi deve essere liberato in seguito.
- Buona prestazione. Questo è meno critico ma dovremmo essere in grado di analizzare 100kb di testo in non più di un secondo su un processore 3ghz.
- Deve essere privo di GPL. Non possiamo usare il codice GNU.
Mi piacciono gli strumenti IDE e di debug di ANTLRworks, ma sembra che ottenere il proprio target C per funzionare effettivamente con la nostra app sarà un'impresa enorme. Prima che mi imbarchi su questa paletta, ANTLR è lo strumento giusto per questo lavoro?
Il formato di testo in questione sembra qualcosa di simile:
attribute "FluxCapacitance" real constant
asset DeLorean
{
//comment foo bar baz
model "delorean.mdl"
animation "gullwing.anm"
references "Marty"
loadonce
}
template TimeMachine
{
attribute FluxCapacitance 10
asset DeLorean
}
ANTL3 supporta C++: https://theantlrguy.atlassian.net/wiki/pages/viewpage.action?pageId=2687097 questa risposta deve essere aggiornata. –