2009-08-04 19 views
1

Ich arbeite an einem Reverse Engineering Schulprojekt, das die Übersetzung von AST des kompilierten C# -Projekts erfordert. Ich habe den Beitrag auf "Übersetzen C# -Code in AST?" auf dieser Website, aber es sieht nicht so aus, wie ich es suche. Nach dem, was ich wusste, stellt C# derzeit keine Bibliotheksklasse zur Verfügung, die das für Java so ähnlich macht: http://help.eclipse.org/help33/index.jsp?topic=/org.eclipse.cdt.doc.isv/reference/api/org/eclipse/cdt/core/dom/ast/ASTVisitor.html Wenn es in C# eine solche Bibliotheksklasse gibt, ist hier alles gelöst.Wie manipuliert man C# AST?

Ich habe mit jemandem beraten, und hier sind die möglichen Lösungen. Aber ich habe Probleme mit der Ausarbeitung der Lösungen. 1) Finden Sie einen anderen Compiler, der eine Bibliothek zur Verfügung stellt, die es ermöglicht, dass seine AST für die Manipulation verfügbar gemacht wird. Aber ich kann einen Compiler wie diesen nicht finden. 2) Verwenden Sie ANTLR Parser Generator, um mit meinem eigenen Compiler zu kommen, der das tut (es wird ein viel schwierigerer und längerer Prozess sein). Der Download dort bietet Beispielgrammatiken für verschiedene Sprachen, aber nicht C# (es hat Grammatiken in verschiedenen Sprachen einschließlich C# geschrieben, aber nicht C# Grammatik zu produzieren). Daher ist das Problem, ich kann C# Grammatik nicht finden.

Was ist der kürzeste und schnellste Weg, dieses Problem anzugehen? Wenn ich wirklich eine der oben genannten Alternativen wählen muss, wie sollte ich dann die Probleme lösen, mit denen ich konfrontiert war?

Ich wäre Ihnen sehr dankbar, wenn Sie mir helfen können, mein Problem gelöst zu bekommen!

+0

Ich bin unklar, ob Sie C# Äste mit C#, oder einfach nur Äste manipulieren den Einsatz von Werkzeugen überhaupt zu manipulieren. Und ich bin verwirrt über Ihre Bemerkung zu ANTLR: Ich dachte, es gäbe eine C# 3.0-Grammatik, die ANTLR verarbeiten könnte, um C# -Bäume zu parsen und zu erstellen. –

Antwort

0

ANTLR ist keine gute Wahl . Ich probiere jetzt mit Mono Cecil aus. Mono Cecil eignet sich gut zur Analyse von Quellcodes, die in Common Intermediate Language (CIL) zusammengefasst werden können. Der Nachteil ist, dass es keine ordnungsgemäße Dokumentation hat.

0

Ein vollständiger C# 3.0 Parser ist mit unserer DMS Software Reengineering Toolkit (kurz DMS) verfügbar. Es wurde verwendet, um Zehntausende von C# -Dateien genau zu verarbeiten. Es bietet automatische AST-Erstellung, Baumdurchquerungen, Oberflächen-Syntax Mustererkennung und Transformation und vieles mehr. Als kommerzielles Produkt kann es für ein Studentenprojekt nicht funktionieren.

ANTLR bietet wohl einen C# Parser, aber ich weiß nicht vollständig oder robust es ist, oder ob es tatsächlich ASTs baut.

[EDIT 25. Januar 2010: C# 4.0-Parser jetzt auch für DMS mit allen oben genannten Eigenschaften]

[EDIT Mai 2016: C 6.0 Parser für DMS verfügbar #.]

+0

Um besser zu verdeutlichen: Ich wollte etwas tun, das es mir ermöglicht, in einer C# Datei oder einem Verzeichnis mit einem C# -Projekt zu parsen, und es wird in der Lage sein, einen AST zu erstellen, der es mir erlaubt, Manipulationen daran vorzunehmen. Manipulation zum Reverse Engineering von C# -Codes nach UML. – yeeen

+0

UML hat eine Vielzahl von Teilmodellen. Das Erstellen von Klassendiagrammen aus einem Syntaxbaum mit einer Symboltabelle sollte ziemlich einfach sein. Das Erstellen von Zustandsdiagrammen ist wahrscheinlich ziemlich schwierig. Wir haben einige Erfahrung mit DMS, um Java-Quellcode in OMG Executable UML zu verarbeiten, und das war ein bisschen schwierig; es brauchte vollständige Kontrolle und Datenflussanalyse. Keiner der Letzteren ist mit ANTLR oder irgendeinem allgemeinen Analysesystem, das ich kenne, außer für DMS verfügbar. YMMV. –

+0

DMS - Dokumentenverwaltungssystem? YMMV - ??? Wie auch immer, ich bin nur verpflichtet, Reverse Engineering in UML-Klassen-Diagramm. Ich arbeite jetzt an ANTLR, da es der einzige Weg zu sein scheint, mit dem ich den AST manipulieren kann. Später wird es erforderlich sein, den Ansatz der Klassenhierarchieanalyse zu verwenden, um in UML zu konvertieren, das in einer Datenbank gespeichert werden soll. Sie müssen auf den nächsten Befehl für den UML-Teil warten. Ich habe ein weiteres qn hier gepostet: "http://stackoverflow.com/questions/1291153/building-own-c-compiler-using-antlr-compilation-unit". Ich arbeite immer noch daran. Vielleicht kannst du eine Anleitung geben. – yeeen

3

Ich kenne die Antwort für diesen vor langer Zeit angenommen wurde. Aber ich hatte eine ähnliche Frage und war mir der Optionen nicht sicher. Ich habe ein wenig Nachforschungen über die NRefactory-Bibliothek gemacht, die als Teil von SharpDevelop ausgeliefert wird. Es erstellt generiert einen AST von C# -Code.

Hier ist ein Bild der NRefactory-Demo-Anwendung, die Teil des SD-Quellcodes ist. Geben Sie einen C# -Code ein, und der AST wird in einer Baumansicht generiert und angezeigt.

alt text

Verwandte Themen