Ich frage mich, ob jemand existierende C++ - Parser/Code-Modelle kennt, die programmatisch in Java verwendet werden können. Ich suche etwas Ähnliches wie das Eclipse CDT, das als eine Bibliothek von Java verwendet werden kann (und das nicht auf Eclipse angewiesen ist). Danke im Voraus.C++ Parser/Model für Java
Antwort
Es gibt einige unvollständige LALR Grammatiken für Parser-Generatoren wie Lex, Yacc, Antlr, Jack usw.
C++ hat eine unentscheidbar Syntax Grammatik, so LALR und BNR Grammatiken immer unvollständig sein wird, aber solange Sie Ich versuche nicht, einen C++ - Compiler zu schreiben, sie sollten gut genug sein.
Es gibt einige C++ - Grammatiken für JavaCC. Versuchen Sie Google.
Ich glaube nicht, dass Sie eine robuste JavaCC-Grammatik für C++ erhalten. Wenn Sie dies tun, müssen Sie sich immer noch Gedanken über die Präprozessorbehandlung machen. Beide sind kleine Schmerzen im Vergleich zu C++, die eine königliche Hündin (600 Seiten C++ Standard ...) ist. –
Sie können entweder die Vorverarbeitung überspringen oder sie eigenständig als ersten Durchlauf über etwas wie "g ++ -E" ausführen. --- Bücher wie das ARM (Annotated C++ Reference Manual), (etwas veraltet - C++ wurde seitdem verbessert), enthalten die C++ - Grammatik. Ich dachte, das Ziel hier wäre Parsing, nicht Kompilieren. Die Symboltabelle ist daher nicht notwendig. Ich habe C++ JavaCC Parser in vergangenen Zeiten geschrieben. Open-Source-Lösungen existieren. –
Der OP war nicht klar, was er machen wollte.Auf jeden Fall gibt es nicht viel, was man mit C++ ohne eine Symboltabelle machen kann. Wenn er also nicht nach sehr begrenzten Informationen sucht, braucht er eine. –
Sie möchten nicht Ihren eigenen C++ - Parser erstellen. Es wird dich töten.
Sie wissen bereits, über die Eclipse-CDT-Projekt: www.ibm.com/developerworks/library/os-ecl-cdt3/index.html AFAIK, dass Parser ist, na ja, ein bisschen unscharf an den Rändern. YMMV. Vorteil: in Java (und in Eclipse, wenn Sie sich interessieren). Wenn Sie C++ verarbeiten und es in Java tun möchten, könnte dies Ihre einzige praktische Wahl sein.
Es ist auch unsere DMS Software Reengineering Toolkit C++ Frontend: http://www.semdesigns.com/Products/FrontEnds/CppFrontEnd.html Arbeiten mit einer Vielzahl von C++ Dialekten (ANSI, GNU, MSVC 2005/2008), getestet durch Feuer auf Millionen von Zeilen Code. Nachteil aus Ihrer Sicht: Nicht in Java. Aber wenn Sie wirklich wollen C++ zu analysieren, eine Regel machen , dass Sie nur dazu bereit sind, es in Java zu tun, könnte nicht Ihnen das Beste dienen.
C++ ist nicht unentscheidbar. Es ist nicht LR oder LALR, was bedeutet, dass es schwierig ist, diese Parser-Technologien zu parsen. Das ist nur ein kleiner Schmerz im Vergleich zur Konstruktion von Symboltabellen für C++, die eine königliche Hündin ist (600 Seiten des C++ Standards ...). Ehrlich gesagt, es ist nur dumm zu versuchen, einen eigenen C++ - Parser zu erstellen, es sei denn, dass Sie so Ihren Lebensunterhalt verdienen wollen. –
Mein Fehler. Es ist "unentscheidbar" ist ein Kommentar, den ich oft sehe, selten bestritten. Ich glaube, ich habe die Bedeutung von "unentscheidbar" falsch verstanden. – greyfade
C++ ist wirklich unentscheidbar, weil Syntaxbäume manchmal von semantischen Variablen abhängen. "Undecidability" bedeutet hier, dass das Halting-Problem auf das Parsen von C++ reduziert werden kann. Siehe http://yosefk.com/c++fqa/web-vs-c++.html#misfeature-3 –