AST aus C-Code [closed]

Lesezeit: 4 Minuten

Ich möchte einige Transformationen am C-Quellcode durchführen. Ich brauche ein Tool unter Linux, das aus dem Quellcode einen vollständigen AST generiert damit ich meine Transformationen auf diesen AST anwenden und ihn dann wieder in den C-Quellcode konvertieren kann. Ich habe es versucht ELSA aber es wird nicht kompiliert. (Ich verwende Ubuntu 8.4). Kann jemand ein besseres Tool/Anwendung vorschlagen?

  • Ich glaube, OpenC++ ist so nah, wie Sie es jetzt bekommen werden.

    Rektid

    4. November 2008 um 6:52 Uhr

ich würde empfehlen klirren. Es hat eine ziemlich vollständige C-Implementierung mit den meisten gcc-Erweiterungen und der Code ist sehr verständlich. Ihre C++-Implementierung ist unvollständig, aber wenn Sie sich nur darum kümmern, ASTs aus C-Code zu generieren, sollte das in Ordnung sein. Je nachdem, was Sie tun möchten, können Sie entweder Clang als Bibliothek verwenden und direkt mit den ASTs arbeiten oder Clang sie auf die Konsole ausgeben lassen.

  • Das tut es absolut. So funktioniert die gesamte Umschreibfunktion von clang-cc. Für ein konkretes Beispiel checkout llvm.org/svn/llvm-project/cfe/trunk/lib/Frontend/… was passiert, wenn Sie ausführen clang-cc -rewrite-blocks.

    – Louis Gerbarg

    9. November 2009 um 11:02 Uhr

Benutzer-Avatar
Eli Bendersky

Sehen Pycparser – ein reiner Python-AST-Generator für C.

  • Nur C99-Unterstützung. Mag für viele ausreichen. War nichts für mich.

    – Techniker

    23. April 2016 um 15:41 Uhr


Benutzer-Avatar
Remo.D

Es gibt zwei Projekte, die mir bekannt sind und die Sie nützlich finden könnten:

Beide analysieren einen Standard-C-Quellcode, um weitere Analysen und Transformationen zu ermöglichen. Ich habe sie nicht verwendet, also müssen Sie selbst überprüfen, ob sie Ihren Bedürfnissen entsprechen.

Der Vorschlag, GCC zu verwenden, gilt natürlich auch. Ich weiß jedoch, dass es nicht viel Dokumentation zu diesem Aspekt von gcc gibt.

  • CIL regeneriert keinen Quellcode, AFAIK.

    – Ira Baxter

    9. November 2009 um 2:37 Uhr

  • Soweit ich weiß, verlangt CIL, dass Sie Ihre AST-Analysen in OCaml schreiben; C-Unterstützung ist geplant.

    – Techniker

    23. April 2016 um 15:40 Uhr


Um eine AST-XML-Ausgabe zu erhalten, können Sie versuchen, sie zu verwenden scannen aus MarpaX::Sprachen::C::AST. Die Ausgabe sieht folgendermaßen aus:

xml
<cscan>
<typedef_hash>
<typedef id="GLenum" before="unsigned int" after="" file="/usr/include/GL/gl.h"/>
...

www.antlr.org

  • Während die Standard-ANTLR-Distribution keinen C-Parser enthält, gibt es eine Reihe davon, googeln Sie sie einfach. Grüße Sebastiaan

    – Sebastian M

    12. Juli 2009 um 11:52 Uhr

  • Es gibt ANTLR-basierte C-Parser. Ich weiß nicht, ob einer von ihnen die Quelle aus einem (modifizierten) AST regenerieren kann.

    – Ira Baxter

    9. November 2009 um 2:38 Uhr

Benutzer-Avatar
plan9assembler

http://ctool.sourceforge.net/

  • Während die Standard-ANTLR-Distribution keinen C-Parser enthält, gibt es eine Reihe davon, googeln Sie sie einfach. Grüße Sebastiaan

    – Sebastian M

    12. Juli 2009 um 11:52 Uhr

  • Es gibt ANTLR-basierte C-Parser. Ich weiß nicht, ob einer von ihnen die Quelle aus einem (modifizierten) AST regenerieren kann.

    – Ira Baxter

    9. November 2009 um 2:38 Uhr

Benutzer-Avatar
Gemeinschaft

Unser DMS-Software-Reengineering-Toolkit wurde auf riesigen C-Systemen verwendet, um C-Code zu parsen, zu analysieren, zu transformieren und neu zu generieren. Läuft unter Windows und unter Linux unter Wine, aber es verarbeitet C-Code im Linux-Stil (GCC).

Ich kann die Möglichkeit, den C-Quellcode umzuwandeln, nicht genug betonen: Analysieren, Bäume erstellen, transformieren, kompilierbaren C-Code mit den Kommentaren und entweder mit Schöndruck oder mit der Einrückung des ursprünglichen Programmierers regenerieren. Nur wenige der anderen Antworten hier schlagen Systeme vor, die dies robust tun können.

Die Tatsache, dass DMS (im Gegensatz zu anderen hier in den Antworten vorgeschlagenen Systemen) darauf ausgelegt ist, Programmtransformationen durchzuführen, ist ebenfalls ein großer Vorteil. DMS bietet Baummusterübereinstimmungen und -umschreibungen; Es erweitert dies um vollständige Kontrolle und Datenflussanalysen, die verwendet werden können, um die Bedingungen zu erweitern, die Sie abgleichen möchten. Ein Tool, das ein Compiler sein soll, ist genau das, und Sie werden es sehr schwer haben, es davon zu überzeugen, kein Compiler und stattdessen eine Transformations-Engine zu sein, wie das OP es verlangt hat.

Siehe https://stackoverflow.com/a/2173477/120163 für Beispiele von ASTs, die von DMS produziert werden.

1341100cookie-checkAST aus C-Code [closed]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy