Parser Generatoren



  • Hallo,

    ich bin schon seit langer Zeit auf der Suche nach Tutorials bzgl. Parsern (Matheparser, Scriptparser, etc.). Ich hatte schon einmal angefangen, einen Matheparser "händisch" zu programmieren. Schnell kam die Erkenntnis, dass es viel zu aufwendig ist.

    Also machte ich mich auf die Suche nach Parsergeneratoren bzw. Anleitungen, wie man diese programmiert. Alles was ich (mehrfach) gefunden habe, sind die theoretischen / mathematischen Grundlagen (Firstmengen, Followmengen, Bäume und Co.). Ich habe es bisher nicht geschafft, die Brücke von der Theorie zur Praxis zu schlagen.

    Kurz: Ich suche Tutorials, in denen Ansatzweise erklärt wird, wie man von einer Grammatik zu einem Parser kommt. Im einfachsten Fall würde es reichen, dass ich Addition und Subtraktion (inkl. Integer) in eine Textdatei schreibe (also die Grammatik vorgebe) und mit einem extra Programm die Parsertabellen daraus erzeugen kann. Ich benötige das für ein aktuelles Projekt und möchte ungern alles per Hand machen.

    Kann hier jemand helfen?

    lg Torsten



  • https://en.wikipedia.org/wiki/Comparison_of_parser_generators

    hilft dir das hier vielleicht schonmal ein rauszuschaun für C++ und dabei dann ein Tutorial für das konkrete ding zu folgen?
    Kann leider keinen empfehlen, weil ich das bisher nicht verwendet habe.
    EDIT: Für Matheparser gibt es auch libraries. Ich hab mal muparser benutzt https://beltoforion.de/en/muparser/ aber das ist ein ziemlicher Koloss.
    Wär mein Vorschlag.



  • Für C++ gibt es hier im Forum zwei Artikel: Interpreterbau - Ein Anfang sowie Compilerbau

    Und eine generelle Liste von Parsergeneratoren gibt es in der Wikipedia: Comparison of parser generators.
    Die bekanntesten (und wohl auch meistverwendeten) sind (F)Lex/Bison, Yacc und ANTLR.

    Ich selber habe auch auf Grundlage eines in C++ geschriebenen Matheparsers diesen nach C# portiert und einen kurzen Artikel dazu geschrieben: Parser für mathematische Formeln
    Den Server zu meinen in C++ geschriebenen Matheparsers gibt es (leider) nicht mehr, den ich hier im Forum öfters verlinkt hatte (ich könnte den aber sicherlich dir irgendwie zur Verfügung stellen).

    Evtl. könnte auch mein Projekt Extended Backus-Naur-Form (EBNF)-Parser für dich interessant sein (um die Theorie dazu zu verstehen).



  • Ah cool,

    so viele Möglichkeiten, vielen Dank euch beiden.

    Ich will ungern einen fertigen Parser nutzen, da ich auch verstehen will, wie das funktioniert. Ich denke, dass man das dieses Wissen als Programmierer an sehr vielen Stellen brauchen kann.

    lg Torsten



  • Wenn du deine Grammatik schon definiert hast, kannst du Lex und Yacc verwenden, um dir Scanner und Parser generieren zu lassen.



  • @axels sagte in Parser Generatoren:

    Wenn du deine Grammatik schon definiert hast, kannst du Lex und Yacc verwenden, um dir Scanner und Parser generieren zu lassen.

    Lex und Yacc Flex und Bison

    Gibt es Lex und Yacc noch irgendwo?



  • @manni66 Danke für die Korrektur, natürlich steckt da Flex und Bison drunter, auch wenn die Befehle unter Linux noch lex und yacc heißen...


Log in to reply