سؤال

ما هي الموزعات المتوفرة لتحليل كود C#؟

أنا أبحث عن محلل C# يمكن استخدامه في C# ويمنحني إمكانية الوصول إلى معلومات السطر والملف حول كل قطعة أثرية من التعليمات البرمجية التي تم تحليلها.

هل كانت مفيدة؟

المحلول

يعمل على كود المصدر:

يعمل على التجميع:

تكمن مشكلة "تحليل" التجميع في أن لدينا معلومات أقل حول السطر والملف (تعتمد المعلومات على ملف .pdb، ويحتوي Pdb على معلومات الأسطر للطرق فقط)

أنا أوصي شخصيا مونو. سيسيل و NRefactory.

نصائح أخرى

كثرة الوحيدات (مفتوح المصدر) يتضمن مترجم C# (وبالطبع محلل)

إذا كنت ستقوم بتجميع C# v3.5 إلى تجميعات .net:

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

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

إذا كنت معتادًا على ANTLR، فيمكنك استخدامه قواعد Antlr C #.

لقد قمت بتنفيذ ما تطلبه (AST Parsing of C# code) في ملف منصة OWASP O2 المشروع باستخدام واجهات برمجة تطبيقات SharpDevelop AST.

من أجل تسهيل الاستهلاك، كتبت واجهة برمجة تطبيقات سريعة تكشف عددًا من عناصر كود المصدر الرئيسية (باستخدام البيانات والأنواع والأساليب والخصائص والحقول والتعليقات) وتكون قادرة على إعادة كتابة كود C# الأصلي إلى C# وإلى VBNET .

يمكنك رؤية واجهة برمجة التطبيقات هذه أثناء العمل على ملف البرنامج النصي O2 XRule: ascx_View_SourceCode_AST.cs.o2 .

على سبيل المثال، هذه هي كيفية معالجة نص التعليمات البرمجية المصدر لـ C# وملء عدد من TreeViews وTextBoxes:

    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");                                
    }

المثال على ascx_View_SourceCode_AST.cs.o2 يوضح أيضًا كيف يمكنك بعد ذلك استخدام المعلومات التي تم جمعها من AST لتحديد نوع أو طريقة أو تعليق وما إلى ذلك على الكود المصدري.

كمرجع هنا هو رمز واجهة برمجة التطبيقات الذي كتب (لاحظ أن هذه هي أول تجربة لي في استخدام محلل C# AST الخاص بـ SharpDevelop، وما زلت أفكر في كيفية عمله):

لقد قمنا مؤخرًا بإصدار محلل C# الذي يتعامل مع جميع ميزات C# 4.0 بالإضافة إلى ميزة المزامنة الجديدة: محلل C# وCodeDOM

تقوم هذه المكتبة بإنشاء نموذج كائن دلالي يحتفظ بالتعليقات ومعلومات التنسيق ويمكن تعديله وحفظه.كما أنه يدعم استخدام استعلامات LINQ لتحليل كود المصدر.

SharpDevelop, ، وهو بيئة تطوير متكاملة (IDE) مفتوحة المصدر، ويأتي مزودًا بمحلل أكواد برمجية قائم على الزائرين والذي يعمل بشكل جيد حقًا.ويمكن استخدامه بشكل مستقل عن IDE.

فكر في استخدام الانعكاس على ثنائي مدمج بدلاً من تحليل كود C# مباشرةً.واجهة برمجة تطبيقات الانعكاس سهلة الاستخدام حقًا وربما يمكنك الحصول على جميع المعلومات التي تحتاجها؟

القي نظرة على محلل الذهب.يحتوي على وحدة دولية بديهية للغاية تتيح لك اختبار قواعدك بشكل تفاعلي وإنشاء كود C#.هناك الكثير من الأمثلة المتاحة معه وهي مجانية تمامًا.

ربما يمكنك تجربة Irony على موقع Irony.codeplex.com.

إنه سريع جدًا ويوجد بالفعل قواعد نحوية لـ C#.

تتم كتابة القواعد نفسها مباشرة بلغة c# بطريقة تشبه BNF (يتم تحقيق ذلك مع التحميل الزائد لبعض المشغلين)

وأفضل ما في الأمر هو أن "القواعد" تنتج AST مباشرة.

يجب عليك بالتأكيد التحقق من Roslyn نظرًا لأن MS قد فتح للتو (أو سيفتح قريبًا) الكود بترخيص Apache 2 هنا.يمكنك أيضًا التحقق من طريقة لتحليل هذه المعلومات باستخدام هذا الرمز من جيثب.

الشيء الذي يكتسب زخمًا ومناسبًا جدًا للوظيفة هو نيميرل

يمكنك أن ترى كيف يمكن حلها في مقاطع الفيديو هذه من NDC:

ليس في C#، ولكن يتوفر محلل C# 2/3/4 كامل يبني AST كاملًا لدينا مجموعة أدوات إعادة هندسة برمجيات DMS.

يوفر DMS بنية تحتية واسعة للتحليل وبناء الأشجار وإنشاء جداول الرموز وتحليلات التدفق والتحويل من مصدر إلى مصدر وتجديد كود المصدر من ASTs (المعدلة).(كما أنه يتعامل مع العديد من اللغات الأخرى غير لغة C# فقط.)

تحرير (سبتمبر) 2013:لم يتم تحديث هذه الإجابة مؤخرًا.لقد تعامل DMS منذ فترة طويلة مع C# 5.0

جي بي بي جي قد يكون مفيدًا، إذا كنت على استعداد لكتابة المحلل اللغوي الخاص بك (وهو أمر ممتع).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top