Frage

Welche Lexer / Parser-Generator ist das beste (am einfachsten zu bedienen, schnell) für C oder C ++? Ich verwende jetzt Flex und Bison, aber Bison nur Griffe LALR (1) Grammatiken. Die Sprache, die ich bin Parsen nicht wirklich unbegrenzt Look-Ahead braucht, aber unbegrenzt Look-Ahead würde machen Parsen viel einfacher. Soll ich versuchen, Antlr? Coco / R? Elkhound? Etwas anderes?

War es hilfreich?

Lösung

Aktualisiert 2015.01.05:

Mein Original-Antwort zeigt auf eine nun gelöscht Frage:

  

Es gibt ein paar gute Antworten auf diese Frage bereits in Welche Parser-Generator Sie tun empfehlen

Also habe ich die Liste der Elemente aus der gelöscht Antwort auf archive.org mit hier mindestens 1 Stimme:

Ich habe mehrere Flex / Bison-Systeme selbst getan, aber jetzt würde ich ersetzen beide mit Lemon von sQLite, da es ein Werkzeug, einspringende und auch Thread-sicher einen Streaming / Pull-basiertes Modell hat.

Andere Tipps

Die schlechte Nachricht ist, dass die meisten realen Computer langauges nicht „LALR (1)“, was bedeutet, dass Sie zu erheblichen hackery zurückgreifen müssen, um YACC echten langauges analysiert zu machen.

Wenn Sie eine DSL entwerfen, können Sie die LALR Parser-Generatoren verwenden, ohne viel Mühe, gerade weil Sie die Grammatik Ihres DSL ändern kann, wenn der Parser-Generator kreischt. LL Parser-Generatoren arbeiten meist auch hier aus dem gleichen Grunde aber der Mangel an Linksrekursion kann ein echten Schmerzen.

Wenn Sie in der Art und Weise sind kompromisslose Sie Ihre Syntax mögen, GLR-Parser sind hands-down Gewinner. Wir nutzen sie in dem DMS Software Reengineering Toolkit und haben die Produktionsqualität gebaut Parser für einige mehr als 30 Sprachen, darunter C ++, die eine Volks Satz sagen, seine fast unmöglich zu analysieren hat. Die Folk-Theorem wurde von Menschen mit LL und LALR Parser gestartet C ++, um zu versuchen und zu behandeln. GLR macht es leicht.

ANTLR macht unbegrenzte Look-Ahead sehr einfach mit ‚Backtrack‘ Option. Es könnte auch Ihre ‚am einfachsten zu verwenden, schnellsten‘ Kriterien qualifizieren, da es ANTLRWorks hat, dass Sie Ihre Grammatik visualisieren und zu debuggen lassen.

Ein weiterer Vorteil ist, dass es AST Gebäude einfach leicht mit seinem macht eine integrierte Unterstützung für den Bau Ast, die in Bison fehlen.

Mit zwei Büchern veröffentlicht - ‚ANTLR: Definitive Guide‘ und ‚Sprache Design Patterns‘, ist es eines unter den sehr gut dokumentiert Tool zur Verfügung. Sie könnten auch eine sehr aktive Mailing-Liste haben.

Ich weiß nicht, was Sie genau suchen, aber ich denke, dass Boost- Xpressive lohnt ein Blick in ...

nicht gerade ein Parser-Generator, sondern ein großes Werkzeug Grammatiken zu handhaben und ich glaube, es seltsam diejenigen verarbeiten kann.

Ich habe das GOLD-Parsing-System unter Verwendung von ( http://www.devincook.com/goldparser) mit sehr guten Ergebnissen. Mein Projekt ist klein, ein Analysesystem für die NC-Dateien in C. Aber ich denke, das Werkzeug kann komplexere Projekte handhaben als auch.

Der neueste Bison behauptet unbegrenztes Look-Ahead zu tun, um (in der Tat) gleichzeitig mehrere Parsen tun. Wenn Sie bereits Investitionen in Bison haben, dann kann es sich lohnen, die versuchen, diese aus, anstatt in ein anderes Paket wechseln.

http://www.gnu.org/software /bison/manual/bison.html#GLR-Parsers

Ich habe diese Funktion selbst nicht verwendet, aber.

Was andere Systeme gehen, ich habe verwendet ANTLR. Ich habe nicht besonders wie sie (die Dokumentation war nicht sehr gut, und man muss man manuell Grammatik des Faktor für Operator Vorrang gerecht zu werden), aber es hat funktioniert, und so viele schwören darauf, dass es auf jeden Fall lohnt einen Blick auf.

LRSTAR 9.1 kann LR (1) und LR (*) Parser erzeugen. Es ist ein C ++ basiertes System, freundlich auf Windows und Visual Studio. Es schafft tabellengesteuerte Parser und tabellengesteuerte lexers, die sind klein und schnell zu kompilieren. LRSTAR Parser kann eine AST automatisch aufzubauen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top