it-swarm-eu.dev

Parser für C #

Welche Parser stehen zum Parsen von C # -Code zur Verfügung?

Ich suche nach einem C # -Parser, der in C # verwendet werden kann, und erhalte Zugriff auf Zeilen- und Dateiinformationen zu jedem Artefakt des analysierten Codes.

99
Julien Hoarau

Funktioniert mit Quellcode:

Montagearbeiten:

Das Problem beim "Parsen" von Assemblys besteht darin, dass wir weniger Informationen zu Zeilen und Dateien haben (die Informationen basieren auf einer PDB-Datei, und Pdb enthält Zeileninformationen nur für Methoden).

Ich empfehle persönlich Mono.Cecil und NRefactory .

116
Julien Hoarau

Mono (Open Source) beinhaltet C # -Compiler (und natürlich Parser)

7
aku

Wenn Sie C # v3.5 in .net-Assemblys kompilieren möchten:

var cp = new Microsoft.CSharp.CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } });

http://msdn.Microsoft.com/en-us/library/Microsoft.csharp.csharpcodeprovider.aspx

6
zproxy

Wenn Sie mit ANTLR vertraut sind, können Sie Antlr C # Grammatik verwenden.

5
prosseek

Ich habe genau das, was Sie verlangen (AST-Analyse von C # -Code), im Projekt OWASP O2 Platform mithilfe von SharpDevelop AST APIs implementiert.

Um das Konsumieren zu vereinfachen, habe ich eine schnelle API geschrieben, die eine Reihe wichtiger Quellcodeelemente (unter Verwendung von Anweisungen, Typen, Methoden, Eigenschaften, Feldern, Kommentaren) verfügbar macht und den ursprünglichen C # -Code in C # und VBNET umschreiben kann .

Sie können diese API in Aktion in dieser O2 XRule-Skriptdatei sehen: ascx_View_SourceCode_AST.cs.o2 .

So verarbeiten Sie beispielsweise einen C # -Quelltext und füllen eine Reihe von TreeViews & TextBoxes auf:

    public void updateView(string sourceCode)
    {   
        var ast = new Ast_CSharp(sourceCode);
        ast_TreeView.show_Ast(ast);
        types_TreeView.show_List(ast.astDetails.Types, "Text");
        usingDeclarations_TreeView.show_List(ast.astDetails.UsingDeclarations,"Text");
        methods_TreeView.show_List(ast.astDetails.Methods,"Text");
        fields_TreeView.show_List(ast.astDetails.Fields,"Text");
        properties_TreeView.show_List(ast.astDetails.Properties,"Text");
        comments_TreeView.show_List(ast.astDetails.Comments,"Text");

        rewritenCSharpCode_SourceCodeEditor.setDocumentContents(ast.astDetails.CSharpCode, ".cs");
        rewritenVBNet_SourceCodeEditor.setDocumentContents(ast.astDetails.VBNetCode, ".vb");                                
    }

Das Beispiel auf ascx_View_SourceCode_AST.cs.o2 zeigt auch, wie Sie die aus AST=) gesammelten Informationen verwenden können, um im Quellcode einen Typ, eine Methode, einen Kommentar, etc..

Als Referenz dient hier der API-Code, der geschrieben wurde (beachten Sie, dass dies mein erster Versuch ist, den C # AST Parser) von SharpDevelop zu verwenden, und ich verstehe immer noch, wie es funktioniert):

4
Dinis Cruz

Wir haben kürzlich einen C # -Parser veröffentlicht, der alle C # 4.0-Funktionen sowie die neue asynchrone Funktion unterstützt: C # -Parser und CodeDOM

Diese Bibliothek generiert ein semantisches Objektmodell, das Kommentare und Formatierungsinformationen enthält und geändert und gespeichert werden kann. Es unterstützt auch die Verwendung von LINQ-Abfragen zur Analyse von Quellcode.

3
Ken Beckett
2
Galwegian

SharpDevelop , eine Open-Source-IDE, enthält einen besucherbasierten Code-Parser, der sehr gut funktioniert. Es kann unabhängig von der IDE verwendet werden.

2
Akselsson

Ziehen Sie in Betracht, Reflektion für eine erstellte Binärdatei zu verwenden, anstatt den C # -Code direkt zu analysieren. Die Reflection-API ist sehr einfach zu bedienen, und vielleicht können Sie alle benötigten Informationen abrufen?

2
Hallgrim

Vielleicht könntest du es mit Irony auf irony.codeplex.com versuchen.

Es ist sehr schnell und eine C # Grammatik existiert bereits.

Die Grammatik selbst ist in BNF-ähnlicher Weise direkt in c # geschrieben (erreicht mit Überladungen einiger Operatoren)

Das Beste daran ist, dass die "Grammatik" die AST direkt erzeugt.

2
SeeSoft

Schauen Sie sich Gold Parser an. Es hat eine sehr intuitive IU, mit der Sie interaktiv Ihre Grammatik testen und C # -Code generieren können. Es gibt viele Beispiele und es ist völlig kostenlos.

2
sbeskur

Sie sollten unbedingt Roslyn ausprobieren, da MS den Code gerade mit einer Apache 2-Lizenz geöffnet hat (oder bald öffnen wird) hier . Sie können diese Informationen auch mit diesem Code von GitHub analysieren.

2
Jason

Etwas, das an Dynamik gewinnt und für den Job sehr geeignet ist, ist Nemerle

sie können sehen, wie es in diesen Videos von NDC gelöst werden könnte:

1
Stéphane

Nicht in C #, sondern mit unserem DMS Software Reengineering Toolkit steht ein vollständiger C # 2/3/4-Parser zur Verfügung, der vollständige ASTs erstellt.

DMS bietet eine umfassende Infrastruktur zum Parsen, Erstellen von Bäumen, Erstellen von Symboltabellen und Ablaufanalysen, Umwandeln von Quelle zu Quelle und Regenerieren von Quellcode aus den (modifizierten) ASTs. (Es werden auch viele andere Sprachen als nur C # unterstützt.)

EDIT (September) 2013: Diese Antwort wurde in letzter Zeit nicht aktualisiert. DMS hat sich lange mit C # 5.0 beschäftigt

1
Ira Baxter