سؤال

هل من الممكن حاليًا ترجمة كود C# إلى شجرة بناء الجملة المجردة؟

يحرر:بعض التوضيح؛لا أتوقع بالضرورة أن يقوم المترجم بإنشاء AST بالنسبة لي - سيكون المحلل جيدًا على ما يرام ، على الرغم من أنني أرغب في استخدام شيء "رسمي". للأسف ، لن تكون تعبيرات Lambda كافية نظرًا لأنها لا تسمح لي باستخدام أجساد البيان ، وهو ما أبحث عنه.

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

المحلول

مشروع روزلين هو في Visual Studio 2010 ويتيح لك الوصول البرمجي إلى < وأ href = "http://msdn.microsoft.com/en-us/hh543916" يختلط = "noreferrer"> بناء الجملة شجرة ، من بين أمور أخرى.

SyntaxTree tree = SyntaxTree.ParseCompilationUnit(
    @" C# code here ");
var root = (CompilationUnitSyntax)tree.Root;

نصائح أخرى

تحقق من. NET CodeDom الدعم. هناك مقال القديمة على مشروع قانون ل C # CodeDOM محلل ، لكنه فاز 'ر دعم ميزات لغة جديدة.

وهناك ومن المفترض أيضا أن يكون الدعم في #develop لتوليد شجرة CodeDom من C # شفرة المصدر وفقا لهذا <وأ href = "http://geekswithblogs.net/willemf/archive/2006/07/24/86075. ASPX "يختلط =" noreferrer "> نشر .

هناك أقوى بكثير من مشروع R#.نيميرل. بيج:

https://code.google.com/p/nemerle/source/browse/nemerle/trunk/snippets/peg-parser/

ويحتوي على C# Parser الذي يقوم بتحليل جميع أكواد C# وترجمتها إلى AST!

https://code.google.com/p/nemerle/source/browse/nemerle/trunk/snippets/csharp-parser/

يمكنك تنزيل المثبت هنا: https://code.google.com/p/nemerle/

وشخصيا، أود أن استخدام NRefactory ، وهو خال ومفتوحة المصدر ومكاسب شعبية.

ويبدو أن هذا النوع من الوظائف سيتم تضمين مع كل ما يأتي بعد C # 4، وفقا ل أندرس Hejlsberg في "مستقبل C #" PDC فيديو .

ANTLR محلل مولد ديه النحوي لC # 3.0 الذي يغطي كل شيء باستثناء تركيب LINQ.

ولقد أجاب فقط على موضوع آخر هنا في ستاكوفيرفلوو حل أين أنا نفذت API ل إنشاء ومعالجتها AST من C # رمز المصدر

ومن الغريب أن لا أحد اقترح القرصنة مونو C # مترجم القائمة.

C # أمام إنهاء لDMS بتوزيع كامل C # 3.0 بما في ذلك LINQ و تنتج ASTS. DMS في الواقع هو نظام بيئي لتحليل / تحويل الشفرة المصدرية باستخدام ASTS لالأمامية المقدمة إلى اللغات.

وتحرير 2010/03/10: ... الآن يعالج الكامل C # 4.0

وتحرير: 2014/06/27: مقابض C # 5.0 منذ لحظة تماما

وتحرير: 2016/06/15: مقابض C # 6.0. انظر https://stackoverflow.com/a/37847714/120163 لAST العينة.

وANTLR ليست مفيدة للغاية. LINQ ليس ما تريد.

وحاول Mono.Cecil! http://www.mono-project.com/Cecil

ويتم استخدامه في العديد من المشاريع، بما في ذلك NDepend! http://www.ndepend.com/

ويرجى الاطلاع على R # مشروع (آسف المستندات باللغتين الروسية، ولكن هناك بعض أمثلة التعليمات البرمجية). وهو يتيح التلاعب AST على C # رمز.

http://www.rsdn.ru/projects/rsharp/article /rsharp_mag.xml

SVN

والمشروع هو هنا : (URL تحديثها، وذلك بفضل، <وأ href = " https://stackoverflow.com/users/12045/derigel">derigel )

وكما يرجى الاطلاع على Nemerle اللغة. إنها لغة صافي بدعم قوي لmetaprogramming.

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