Quale generatore di lexer/parser è il migliore (più facile da usare, più veloce) per C o C++? In questo momento sto usando flex e bisonte, ma il bisonte gestisce solo grammatiche LALR (1). Il linguaggio che sto analizzando non è in realtà ha bisogno di lookahead illimitato, ma lookahead illimitato renderebbe più semplice l'analisi . Dovrei provare Antlr? Coco/R? Elkhound? Qualcos'altro?Strumenti Lexer/parser
risposta
Aggiornato 2015/01/05:
mio risposta originale che punta a una domanda ora cancellato:
Ci sono un sacco di buone risposte a questa domanda già in What parser generator do you recommend
Quindi ho preso l'elenco di articoli dal deleted answer on archive.org con almeno 1 voto qui:
- Packrat
- Elkhound
- Antlr
- Spirit parte Boost (C++)
- Lemon
- GOLD Parser
- DMS Software Rengineering Toolkit (non FOSS)
Ho eseguito personalmente vari sistemi flex/bison, ma ora sostituivo entrambi con Lemon da sqlite poiché è uno strumento, rientranti e thread-safe oltre ad avere un modello basato su streaming/pull.
Lemon sembra davvero bello, e sono stato in grado di ridurre la grammatica a LALR (1), quindi potrei utilizzarlo. – Zifre
I programmatori di StackOverflow necessitano di un controllo nel proprio sistema prima di eliminare le domande per assicurarsi che non siano referenziati da nessuno. Ti ricordi quali erano alcuni dei suggerimenti? –
Sono d'accordo, questa risposta è ora completamente inutile – paulm
Non so quello che stai cercando esattamente, ma penso che Boost Xpressive vale la pena guardare ...
non esattamente un generatore di parser, ma un ottimo strumento per gestire grammatiche e sento che può gestire quelli strani.
Ho utilizzato il sistema di analisi GOLD (http://www.devincook.com/goldparser) con ottimi risultati. Il mio progetto è piccolo, un sistema di analisi per file NC in C. Ma penso che lo strumento possa gestire anche progetti più complessi.
La cattiva notizia è che la maggior parte delle lingue di computer reali non sono "LALR (1)", il che significa che è necessario ricorrere a una notevole quantità di hacker per far sì che YACC paragoni le vere lingue.
Se si sta progettando un DSL, è possibile utilizzare qualsiasi generatore di parser LALR senza molti problemi proprio perché è possibile modificare la grammatica del DSL quando il generatore di parser gracchia. I generatori di parser LL funzionano principalmente anche qui per lo stesso motivo, ma la mancanza di ricorsione a sinistra può essere un vero dolore.
Se non sei contento del modo in cui ti piace la sintassi, i parser GLR sono vincitori pratici. Li usiamo nel DMS Software Reengineering Toolkit e abbiamo costruito parser di qualità di produzione per oltre 30 lingue tra cui C++, che ha un teorema popolare che dice che è quasi impossibile da analizzare. Il teorema folk è stato avviato da persone che usano parser LL e LALR per provare a gestire C++. GLR lo fa facilmente.
L'ultimo bisonte dichiara di eseguire un numero illimitato di lookahead, eseguendo (in effetti) parecchie analisi simultaneamente. Se hai già un investimento in bison, potrebbe valere la pena provarlo, piuttosto che passare a un altro pacchetto.
http://www.gnu.org/software/bison/manual/bison.html#GLR-Parsers
Non ho usato questa funzione io stesso, però.
Per quanto riguarda gli altri sistemi, ho usato ANTLR. Non mi piaceva particolarmente (la documentazione non era molto buona, e bisognava considerare manualmente la grammatica di uno per soddisfare la precedenza degli operatori), ma ha funzionato, e così tanti giurano che vale sicuramente la pena guardare.
Ho provato l'analisi Bison GLR, ma sembra causare alcuni problemi con la precedenza degli operatori ed è notevolmente più lento. ANTLR è difficile da usare con C++ e preferisco di gran lunga LR su grammatiche di stile LL. – Zifre
ANTLR semplifica il lookahead illimitato con l'opzione 'backtrack'. Potrebbe anche qualificare i criteri "più facili da usare, più veloci" dal momento che ha ANTLRWORKS che consente di visualizzare ed eseguire il debug della grammatica.
Un altro vantaggio è che rende AST facile da costruire con il supporto integrato per la creazione di AST che manca in bisonte.
Con due libri pubblicati - "ANTLR: guida definitiva" e "Modelli di progettazione linguistica", è uno degli strumenti molto ben documentati disponibili. Hai anche una mailing list molto attiva.
LRSTAR 6.4 può eseguire l'analisi LR (k). È un sistema basato su C++, amichevole con Windows e Visual Studio. Crea parser basati su tabelle simili a Bison. Crea anche lexer basati su tabelle simili ai lexer "flex" e a codice diretto simili a "re2c". La velocità del codice generato è circa il doppio della velocità di ciò che "bison" e "flex" creano.
È possibile modificare il file di parser di scheletro e LRSTAR genererà il codice nel modo desiderato oppure è possibile riscrivere il file di scheletro in un'altra lingua, ad esempio C#.
I parser LRSTAR possono creare automaticamente un AST. È una licenza BSD open source. Le persone lo utilizzano su sistemi UNIX/Linux e MAC OS dopo la ricompilazione con GCC.
- 1. Strumenti di refactoring PHP
- 2. Strumenti interfaccia Delphi
- 3. Strumenti grafici - Angular2
- 4. Profiler orario in Strumenti
- 5. Strumenti differ multipli
- 6. Strumenti metrici PHP buoni
- 7. Strutture e strumenti HTML5?
- 8. Strumenti per creare AnimatedVectorDrawable
- 9. Strumenti di ottimizzazione PNG
- 10. Strumenti di test XUL
- 11. Strumenti> dispositivo disattivato
- 12. Migliori strumenti Kanban
- 13. Strumenti di sviluppo Tumblr
- 14. Strumenti di codifica Java utili
- 15. strumenti essenziali per .net programmatore?
- 16. Come utilizzare Google strumenti Potenza
- 17. strumenti per semplificare automaticamente regex
- 18. Altri strumenti per sviluppatori Android
- 19. WPFToolkit.Extended - dove sono gli strumenti?
- 20. Strumenti mercuriali e di unione?
- 21. Debugging WPF: Strumenti e tecniche
- 22. Haskell Strumenti di programmazione GUI
- 23. STEP/strumenti Express per NET
- 24. Strumenti/strategie di automazione EC2?
- 25. Quali strumenti XSLT 2.0 esistono?
- 26. Barra degli strumenti in DialogFragment
- 27. NoClassDefFoundError con registrazione strumenti clojure
- 28. Strumenti di piattaforma mancanti Android
- 29. Barra degli strumenti e NavigationDrawer
- 30. Strumenti modello dati per DB2
Cosa intendi per "migliore"? Devi rendere la tua domanda più specifica. –
Quali sono i tuoi requisiti? LALR (1) non è sufficiente per te, e in tal caso, in che modo? –
I seconda domanda di Brian. Cosa devi essere in grado di fare? In che modo LALR (1) è insufficiente? –