Frage

Welche Parser sind in C # -Code Parsen?

Ich bin für einen C # Parser, der in C # verwendet werden kann, und gib mir den Zugriff auf Linie und Dateiinformationen zu dem einzelnen Artefakt des analysierten Code.

War es hilfreich?

Lösung

Arbeiten auf Quellcode:

Arbeiten auf Montage:

Das Problem bei Montage „Parsen“ ist, dass wir weniger Informationen über Linie und Datei (die Informationen beruhen auf PDB-Datei, und PDB enthält Zeilen Informationen nur für Methoden)

I personnaly empfehlen Mono.Cecil und NRefactory .

Andere Tipps

Mono (Open Source) enthält C # Compiler (und natürlich Parser)

Wenn Sie vorhaben, C # v3.5 auf .NET-Assemblies kompilieren:

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

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

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

Ich habe gerade realisiert, was Sie fordern (AST Parsen von C # -Code) an dem OWASP O2 Platform Projekt mit SharpDevelop AST-APIs.

Um es einfacher zu konsumieren ich eine schnelle API geschrieben, die eine Reihe von Schlüsselquellcodeelementen aussetzt (unter Verwendung von Aussagen, Typen, Methoden, Eigenschaften, Felder, Kommentaren) und ist in der Lage den ursprünglichen C # Code in C # neu zu schreiben und in VBNET.

Sie können diese API in Aktion sehen auf dieser O2 anschließende Klicken auf REGEL Skriptdatei: ascx_View_SourceCode_AST.cs.o2 .

Zum Beispiel ist dies, wie Sie einen C # Quellcode Text verarbeiten und eine Reihe von TreeViews & Textfeldern füllen:

    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 dann die von dem AST gesammelten Informationen können auf dem Quellcode einen Typen, Methode, Kommentar, usw. wählen ..

hier als Referenz ist der API-Code, der geschrieben (beachten Sie, dass dies mein erster Pass ist bei Verwendung von SharpDevelop des C # AST-Parsers, und ich bin immer noch meinen Kopf immer um, wie es funktioniert):

Wir haben kürzlich einen C # Parser freigegeben, die alle C # 4.0-Features behandelt und die neue Asynchron-Funktion: C # Parser und CodeDOM

Diese Bibliothek erzeugt ein semantisches Objektmodell, das Kommentare und Formatierungsinformationen behält und können geändert und gespeichert werden. Es unterstützt auch die Verwendung von LINQ-Abfragen Quellcodes zu analysieren.

SharpDevelop , einem Open-Source-IDE, kommt mit einem Besucher-basierten Code-Parser die funktioniert wirklich gut. Es kann unabhängig von den IDE verwendet werden.

Betrachten Reflexion auf einem integrierten binären zu verwenden, anstatt den C # -Code direkt zu parsen. Die Reflection-API ist wirklich einfach zu bedienen und vielleicht können Sie alle Informationen, die Sie brauchen?

Hier finden Sie aktuelle Gold-Parser . Es hat eine sehr intuitive IU, die Sie interaktiv testen Sie Ihre Grammatik und generieren C # -Code können. Es gibt viele Beispiele mit ihm zur Verfügung und es ist völlig kostenlos.

Vielleicht könnten Sie versuchen, mit Irony auf irony.codeplex.com.

Es ist sehr schnell und eine c # Grammatik ist bereits vorhanden.

Die Grammatik selbst geschrieben wird direkt in c # in einer BNF wie Art und Weise (mit einigen Betreibern Überlastungen acheived)

Das Beste, was mit ihm ist, dass die „Grammatik“ direkt mit dem AST produziert.

Sie sollten auf jeden Fall überprüfen Roslyn da MS gerade geöffnet (oder werden in Kürze geöffnet), um den Code mit einer Apache-2-Lizenz hier . Sie können auch eine Möglichkeit prüfen, diese Informationen mit diesem Code parsen von GitHub .

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

Sie können sehen, wie sie es in diesen Videos von NDC lösen könnte:

Nicht in C #, aber ein vollständigen C # 2/3/4 Parser, der ist mit unserem DMS Software Reengineering Toolkit .

DMS bietet eine breite Infrastruktur für die Analyse, Baum Gebäude, Bau von Symboltabellen und Flussanalysen, Quelle-Source-Transformation und Regeneration des Quellcodes aus den (modifiziert) Äste. (Es ist auch für viele andere Sprachen als nur C #).

EDIT (September) 2013: Diese Antwort wurde vor kurzem nicht aktualisiert. DMS hat langstieligen C # 5.0

GPPG könnte von Nutzen sein, wenn Sie bereit sind, Ihre eigenen zu schreiben Parser (der Spaß macht).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top