سؤال
ما هي الموزعات المتوفرة لتحليل كود C#؟
أنا أبحث عن محلل C# يمكن استخدامه في C# ويمنحني إمكانية الوصول إلى معلومات السطر والملف حول كل قطعة أثرية من التعليمات البرمجية التي تم تحليلها.
المحلول
يعمل على كود المصدر:
- CSParser:من C# 1.0 إلى 2.0، مفتوح المصدر
- محلل ميتاسبيك C#:من C# 1.0 إلى 3.0، منتج تجاري (حوالي 5000 دولار)
- #يتعرف على!:من C# 1.0 إلى 3.0، منتج تجاري (حوالي 900 يورو) (الإجابة بواسطة التعرف على حاد)
- محلل SharpDevelop (الإجابة بواسطة أكسلسون)
- NRefactory:من C# 1.0 إلى 4.0 (+async)، مفتوح المصدر، محلل يستخدم في SharpDevelop.يتضمن التحليل الدلالي.
- محلل C# وCodeDOM:محلل C# 4.0 كامل، يدعم بالفعل ميزة المزامنة C# 5.0.منتج تجاري (49 دولارًا إلى 299 دولارًا) (الإجابة بواسطة كين بيكيت)
- مايكروسوفت روزلين CTP:المترجم كخدمة.
يعمل على التجميع:
- System.Reflection
- البنية التحتية للمترجم المشترك لـ Microsoft:من C# 1.0 إلى 3.0، ترخيص Microsoft العام.استعمل من قبل فككوب و المواصفات #
- مونو. سيسيل:من C# 1.0 إلى 3.0، مفتوح المصدر
تكمن مشكلة "تحليل" التجميع في أن لدينا معلومات أقل حول السطر والملف (تعتمد المعلومات على ملف .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 مباشرة.
الشيء الذي يكتسب زخمًا ومناسبًا جدًا للوظيفة هو نيميرل
يمكنك أن ترى كيف يمكن حلها في مقاطع الفيديو هذه من NDC:
ليس في C#، ولكن يتوفر محلل C# 2/3/4 كامل يبني AST كاملًا لدينا مجموعة أدوات إعادة هندسة برمجيات DMS.
يوفر DMS بنية تحتية واسعة للتحليل وبناء الأشجار وإنشاء جداول الرموز وتحليلات التدفق والتحويل من مصدر إلى مصدر وتجديد كود المصدر من ASTs (المعدلة).(كما أنه يتعامل مع العديد من اللغات الأخرى غير لغة C# فقط.)
تحرير (سبتمبر) 2013:لم يتم تحديث هذه الإجابة مؤخرًا.لقد تعامل DMS منذ فترة طويلة مع C# 5.0
جي بي بي جي قد يكون مفيدًا، إذا كنت على استعداد لكتابة المحلل اللغوي الخاص بك (وهو أمر ممتع).