Brauchen Sie C ++ Parser

8

Ich brauche eine gute, stabile und vielleicht einfach zu verwendende C ++ - Parser-Bibliothek mit C / C ++ - Schnittstelle (C ist bevorzugt).
Ich habe gehört, dass cint ein guter C ++ - Interpreter ist. Kann ich es (oder einen Teil davon) für diesen Zweck verwenden?
Irgendwelche Vorschläge?

    
Artem 04.01.2011, 12:46
quelle

8 Antworten

10

Siehe: Ссылка Es hat sowohl eine C ++ - als auch eine C-Schnittstelle (libclang).

    
kbjorklu 04.01.2011, 12:55
quelle
9

C ++ Parsing ist bekanntlich hart. AFAIK gibt es nur drei Parser, die nach heutigen Standards akzeptabel sind: EDG (weit verbreitet als Frontend in gängigen C ++ Compilern), GCC's und Microsoft's. Und offenbar hat Microsoft begonnen, den Parser von EDG in VS2010 für Intellisense zu verwenden.

Wenn Sie sich die kostenlosen Optionen ansehen, stecken Sie bei GCC fest. Es kann jedoch XML erzeugen, also ist der einfache Teil da. (Einfach durch C ++ Parsing-Standards, das ist)

    
MSalters 04.01.2011 12:55
quelle
2

Clang ist die aktuellste und ausgereifteste Option mit einer anständigen C ++ - API (aber ohne C). Elsa ist etwas veraltet und nicht gepflegt, aber immer noch eine brauchbare Wahl. Beide können sowohl als Bibliotheken als auch als eigenständige XML-Frontends verwendet werden.

    
SK-logic 04.01.2011 12:55
quelle
2

Wenn Sie C- oder C ++ - Code analysieren möchten, gibt es einige Optionen: Ссылка http://students.ceid.upatras.gr/~sxanth/ncc/

Wenn Sie einen Parser mit C / C ++ erstellen möchten, können Sie versuchen: Ссылка http://dinosaur.compilertools.net/ Lex und Yacc Ссылка Flex und Bison

    
bcsanches 04.01.2011 12:57
quelle
2

Unser C ++ Front End kann eine Vielzahl von C ++ - Dialekten analysieren (ANSI, GCC, MSVS ), erstellt automatisch ASTs, deren Knoten mit genauen Quellpositionen markiert sind und die mit einem beliebigen Kommentartext versehen sind, und erstellt eine vollständige Symboltabelle. (EDIT Jan 2013: Das C ++ - Frontend konnte C ++ 11 nun schon eine ganze Weile verarbeiten).

Das C ++ Frontend basiert auf unserem DMS Software Reengineering Toolkit , einer generalisierten Compiler-Technologie für Programmanalyse und -transformation zur Unterstützung des benutzerdefinierten Toolbuildings. Das C ++ - Frontend enthält einen Präprozessor, in dem die Präprozessordirektiven entsprechend der Aufgabe gemeinsam oder einzeln erweitert werden können. Es enthält auch eine vollständige Symbolkonstruktion mit all den fiesen Koenig-Lookup-Sachen.

DMS akzeptiert explizite Sprachdefinitionen (so versteht es C ++; es gibt auch Frontends für C, C #, Java, COBOL und eine Vielzahl anderer Sprachen). DMS bietet allgemeine Analysefunktionen, Symboltabellenerstellung, Flussanalyse-Maschinerie, prozedurale APIs für Baumnavigation / -inspektion / -modifikation, Quell-zu-Quell-Transformation und AST-zu-Quelltext-Regeneration einschließlich der ursprünglichen Kommentare, der Anzahl der Radices, usw. Alle Diese Funktionen stehen für das C ++ - Front-End zur Verfügung.

DMS ist auch dafür ausgelegt, den für ernsthafte Aufgaben erforderlichen Umfang zu bewältigen. Oft brauchen Sie nicht nur eine Kompilierungseinheit (was GCC Ihnen am besten geben wird), sondern Zugang zu einem ganzen Set. DMS wurde verwendet, um Tausende von C ++ - Kompilierungseinheiten und buchstäblich Zehntausende von C-Kompilierungseinheiten (in einer 25-Millionen-Zeilen-Anwendung) zu analysieren / zu transformieren.

"Einfach zu bedienende Bibliothek" ist ein Oxymoron, wenn es um Programmmanipulationswerkzeuge geht. Die Sprachen selbst sind komplex (C ++ ist eines der schwierigsten und wird mit C ++ 0X immer schlechter) und das führt zu Komplexität in der Art der Fragen, die Sie stellen können und wie die Antworten aussehen (zB "Gibt es Template-Instances, die? kann die lokale Variable X in der Methode Y in der Klasse C in jedem Namespace N? "ändern. Die Fragen selbst sind schwer.

Was Sie wollen, ist eine Bibliothek mit der notwendigen Komplexität, mit der Sie Ihre Aufgabe erledigen können. DMS wurde in den letzten 15 Jahren kontinuierlich weiterentwickelt, um die notwendige Komplexität zu gewährleisten. Wenn Sie eine ernsthafte Programmbearbeitung durchführen wollen, behaupte ich, dass Sie diese Informationen benötigen.

Als Beweis wurde DMS verwendet, um ein massives automatisiertes Reengineering der C ++ - basierten Mission Avionics Software für Boeing durchzuführen. Ich glaube nicht, dass es andere Tools gibt, die das können. (Clang versucht es, aber nur für C ++. YMMV).

    
Ira Baxter 04.01.2011 17:57
quelle
1

Ich weiß nicht für cint, aber ich habe gehört, dass Leute dafür gcc-xml verwenden.

Ich habe auch nach einer guten Standalone-Bibliothek gesucht, aber keine gefunden.

    
Roman L 04.01.2011 12:52
quelle
1

Wenn Sie sich mutig fühlen, sind die Links in der Antwort zu " da eine Yacc-fähige C ++ - Grammatik? "könnte hilfreich sein. Gcc-xml und clang wurden bereits vorgeschlagen und Swig hat auch eine XML-Ausgabe , je nachdem, was Sie sind versuchen zu erreichen, könnte relevant sein.

    
Flexo 04.01.2011 12:56
quelle
1

Ich habe es nicht versucht, aber ich denke, dass die beste Wahl sein wird, Module zum Parsen von einem populären Open-Source-Compiler wie gcc zu bekommen für C ++;

Vielleicht finden Sie hier etwas Interessantes Ссылка

    
Edward83 04.01.2011 12:58
quelle

Tags und Links