boost::spirit geeignet hier?



  • Hallo,

    mal angenommen man will ein Intellisense Tool für eine Sprache der Komplexität von vielleicht Java in C++ schreiben. Welchen Parser-Generator würdet ihr dann verwenden bzw. könntet ihr empfehlen?

    Um "Echtzeitfähigkeit" während dem Schreiben zu gewährleisten muss der generierte Parser ja sehr effizient sein.

    Ich überlege schon seit einiger Zeit dafür boost::spirit zu verwenden, da boost im allgemeinen ja eine sehr gute Reputation hat und ich die Syntax auch ganz gut finde.

    Allerdings bin ich nach einiger Recherche jetzt verunsichert: In vielen Beiträgen liest man dass boost::spirit teilweise sehr langsam ist und nicht geeignet für komplexe Grammatiken, wie denen einer modernen Hochsprache.

    Stimmt das? Und wenn ja, welches tool würdet ihr empfehlen für dieses Problem?



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (alle ISO-Standards) in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Möchtest du ein statisches Intellisense haben (also nur einmal am Anfang die Struktur aufbauen) oder aber während der User tippt, den (evtl. nicht kompilierbaren) Code analysieren?

    Für ersteres (am Beispiel von C#) habe ich DIY Intellisense gefunden.

    Und die Probleme beim dynamischen Intellisense werden z.B. von Eric Lippert in A New and Full Implementation of Generic Intellisense angesprochen.

    Ich denke es ist weniger eine Frage welche Parser-Libs man dafür verwendet, sondern eher, wie man zum einen die Sprachdefinition anpasst (damit eben auch unvollständiger Code geparst werden kann) und zum anderen wie man effizient genug die Intellisense-Datenstruktur aktualisiert.



  • Hallo,

    erstmal wollte ich fragen warum der Thread verschoben wurde 😉

    C++ Forumbot schrieb:

    Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (alle ISO-Standards) in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Denn sowohl in der Beschreibung des C++ (Alle ISO Standards) Forums als auch in dem obigen Link steht doch sinngemäß "... oder bei Fragen zu boost". Und das hier ist ja quasi ne boost Frage.

    Th69 schrieb:

    Möchtest du ein statisches Intellisense haben (also nur einmal am Anfang die Struktur aufbauen) oder aber während der User tippt, den (evtl. nicht kompilierbaren) Code analysieren?

    Ein dynamisches welches sich aktualisiert während der User tippt.

    Th69 schrieb:

    Ich denke es ist weniger eine Frage welche Parser-Libs man dafür verwendet, sondern eher, wie man zum einen die Sprachdefinition anpasst (damit eben auch unvollständiger Code geparst werden kann) und zum anderen wie man effizient genug die Intellisense-Datenstruktur aktualisiert.

    Ok, aber trotzdem braucht man ja einen (möglichst effizienten) Parser, richtig? Und dafür würde ich halt gernen einen Parser-Generator verwenden.

    Den Beitrag von Erich Lippert kenn ich schon, finde ich aber nicht so hilfreich um ehrlich zu sein... Letztendlich meint der ja nur "lass es sein" wenn du nicht 5 Mann mit PhD in Parsertheorie in Petto hast.

    Unvollständiger Code wäre erstmal nicht so wichtig, für meine Zwecke reicht es auch wenn einfach beim ersten Fehler abgebrochen wird.



  • Ich würd mir boost::spirit hier nicht antun. Ich empfinde das als zu unübersichtlich und schwer durchschaubar. Ich würde mir viel leichter tun, mit Antlr oder von mir aus auch mit flex und bison eine Gramatik zu definieren.



  • Ich hab damit zwar keine Erfahrung, aber ich kann mir kaum vorstellen dass es Spass machen würde mit einem "klassischen" Parser-Generator etwas ala Intellisense umzusetzen.
    Und mit "klassisch" meine ich dass das Ding nicht speziell darauf ausgelegt ist Syntaxfehler zu "übersehen".



  • Mechanics schrieb:

    Ich würd mir boost::spirit hier nicht antun. Ich empfinde das als zu unübersichtlich und schwer durchschaubar. Ich würde mir viel leichter tun, mit Antlr oder von mir aus auch mit flex und bison eine Gramatik zu definieren.

    Hm, Ok, werd mir dieses flex mal genauer anschauen, das kannte ich noch nicht. Antlr ist halt Java...

    hustbaer schrieb:

    Ich hab damit zwar keine Erfahrung, aber ich kann mir kaum vorstellen dass es Spass machen würde mit einem "klassischen" Parser-Generator etwas ala Intellisense umzusetzen.
    Und mit "klassisch" meine ich dass das Ding nicht speziell darauf ausgelegt ist Syntaxfehler zu "übersehen".

    Also alles per Hand selber machen?



  • happystudent schrieb:

    Also alles per Hand selber machen?

    Äh.
    Ja?
    GCC und Clang verwenden auch hangeschriebene Parser.
    3x darfst du raten warum.



  • hustbaer schrieb:

    Äh.
    Ja?
    GCC und Clang verwenden auch hangeschriebene Parser.
    3x darfst du raten warum.

    Warum? Weil es gar keine IDEs sind und deswegen auch kein "Intellisense" haben? 😉

    Nein Spass, es geht jetzt hier nicht darum solchen High-end Produkten die von etlichen Leuten mitentwickelt wurden Konkurrenz zu machen. Mag sein dass diese Tools es so machen, alles andere wäre dort aber auch sehr verwunderlich.

    Für Eclipse kann man ja auch eine beliebige Sprache als package einbinden, samt intellisense. Ich kenne da auch ein paar die dieses per Antlr realisiert haben und das funktioniert super. Natürlich nicht vergleichbar mit "echten" IDEs, aber trotzdem sehr gut.

    Sowas suche ich halt, nur für C++ und nicht für Java.


  • Mod

    happystudent schrieb:

    Hallo,

    erstmal wollte ich fragen warum der Thread verschoben wurde 😉

    C++ Forumbot schrieb:

    Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (alle ISO-Standards) in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Denn sowohl in der Beschreibung des C++ (Alle ISO Standards) Forums als auch in dem obigen Link steht doch sinngemäß "... oder bei Fragen zu boost". Und das hier ist ja quasi ne boost Frage.

    Erstens ist es keine boost-Frage, da du fragst, welches Framework für dich geeignet wäre und Boost einer der Kandidaten ist.
    Zweitens ist die Beschreibung so zu verstehen, dass es um technische Fragen zum Einsatz von C++ und Boost geht. Nicht um Fragen, ob Boost überhaupt das richtige Werkzeug wäre.



  • SeppJ schrieb:

    Erstens ist es keine boost-Frage, da du fragst, welches Framework für dich geeignet wäre und Boost einer der Kandidaten ist.
    Zweitens ist die Beschreibung so zu verstehen, dass es um technische Fragen zum Einsatz von C++ und Boost geht. Nicht um Fragen, ob Boost überhaupt das richtige Werkzeug wäre.

    Ok, wenn man es so betrachtet hast du recht 🙂

    Wollte nur nochmal nachfragen, für die Zukunft.



  • happystudent schrieb:

    Hm, Ok, werd mir dieses flex mal genauer anschauen, das kannte ich noch nicht. Antlr ist halt Java...

    Flex ist mehr oder weniger "Standard". Früher wars halt lex und yacc, jetzt eher flex und bison (neuere Implementierungen, aber ansonsten praktisch dasselbe). Vielleicht gibts da mittlerweile auch was neueres, glaub aber nicht. Will hier aber nichts falsches erzählen, weil ich die nicht wirklich mag und nur ab und zu in der Arbeit benutze, weil wir das schon seit zwanzig Jahren benutzen.
    Antrl hab ich paar mal mit C# benutzt. Fand ich viel angenehmer als lex/yacc. Das kann auch Generatoren für C++ generieren, aber die waren zumindest vor paar Jahren wohl tatsächlich noch nicht so gut. Ansonsten schreib ich Parser auch gern mal von Hand. Einen C++ Parser würde ich aber nur ungern schreiben, weder von Hand, noch mit einem der Tools.



  • Mechanics schrieb:

    Antrl hab ich paar mal mit C# benutzt. Fand ich viel angenehmer als lex/yacc. Das kann auch Generatoren für C++ generieren, aber die waren zumindest vor paar Jahren wohl tatsächlich noch nicht so gut.

    Klingt eigentlich ganz gut, werd ich mir auch mal näher anschauen.

    Danke auf jedenfall schonmal an alle für den Input, das hilft mir schonmal weiter 👍



  • happystudent schrieb:

    hustbaer schrieb:

    Äh.
    Ja?
    GCC und Clang verwenden auch hangeschriebene Parser.
    3x darfst du raten warum.

    Warum? Weil es gar keine IDEs sind und deswegen auch kein "Intellisense" haben? 😉

    Nein.
    Soweit ich weiss u.A. weil sie fähig sein wollten ordentliche Fehlermeldungen auszugeben.



  • hustbaer schrieb:

    Nein.
    Soweit ich weiss u.A. weil sie fähig sein wollten ordentliche Fehlermeldungen auszugeben.

    Ja, war nicht ganz ernst gemeint (was du gesagt hast gilt natürlich auch für die jeweiligen IDEs).

    Ich will nur fürs erste so simpel (dafür mit meinem jetzigen Kenntnistand machbar) anfangen, deswegen lass ich Fehlermeldungen erstmal weg. Also das ist jetzt erstmal nur als privates Hobby- und Lernprojekt gedacht, nicht um tatsächlich verwendet zu werden.



  • Mein Senf zum originalen Post:
    Wenn du einfach einen C/C++ Parser brauchst, schau dir Clang bzw. LibClang / LibTooling an.


Anmelden zum Antworten