সি # এর জন্য পার্সার


101

সি # কোড পার্সিংয়ের জন্য কোন পার্সার উপলব্ধ?

আমি একটি সি # পার্সার সন্ধান করছি যা সি # তে ব্যবহার করা যেতে পারে এবং বিশ্লেষণ কোডের প্রতিটি প্রত্নতত্ত্ব সম্পর্কে লাইন এবং ফাইল ফাইলের তথ্য অ্যাক্সেস আমাকে দেয়।

উত্তর:


118

উত্স কোডে কাজ করে:

সমাবেশে কাজ করে:

সমাবেশ "পার্সিং" এর সমস্যাটি হ'ল আমাদের কাছে লাইন এবং ফাইল সম্পর্কে কম তথ্য রয়েছে (তথ্যগুলি .pdb ফাইলের উপর ভিত্তি করে রয়েছে, এবং পিডিবিতে কেবল পদ্ধতিগুলির জন্য লাইন সম্পর্কিত তথ্য রয়েছে)

আমি ব্যক্তিগতভাবে মনো - সিসিল এবং এনআরফ্যাক্টরির প্রস্তাব দিই


1
সিএস-স্ক্রিপ্ট ( csscript.net ) - সি # স্ক্রিপ্ট ইঞ্জিন এই তালিকার স্যুট করতে পারে। "মাইক্রোসফ্ট" রোজলিন "সিটিপি" উপস্থাপনের নমুনা সিএস-স্ক্রিপ্টের মতোই।
ডিজিমিত্রি লাহোদা

1
আপনি যখন ব্যয়গুলি উল্লেখ করছেন, তখন নোট করুন যে রোজলিনের জন্য কমপক্ষে ভিজ্যুয়াল স্টুডিওর প্রো সংস্করণ প্রয়োজন।
ক্রিশ্চিয়ানপ

7

মনো (ওপেন সোর্স) এ সি # সংকলক (এবং অবশ্যই পার্সার) অন্তর্ভুক্ত


মনকে অন্যান্য পার্সার ব্যবহার করে কী সুবিধা পাবেন? আমি কি কোনও ভিজিটর ব্যবহার করে একটি সি # প্রোগ্রামের এএসটি তথ্য পেতে পারি? যদি তা হয় তবে আপনি কি আমাকে সেই পৃষ্ঠায় ডাইরেক্ট করতে পারবেন যা এর জন্য পৃষ্ঠাটি দেখায়?
ইয়েইন

6

আপনি যদি নেট # সমাবেশগুলিতে সি # v3.5 সংকলন করতে চলেছেন:

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

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


1
বিশেষত CodeDomProvider.Parse()পদ্ধতিটি দেখুন।
ডন কার্কবি

3
না, কোডডমপ্রোভাইডার.পার্স () পদ্ধতিটি দেখুন না যা পাবলিক বিল্ডগুলিতে একটি নোট-ইমপ্লিমেন্টেড ব্যতিক্রম ছুঁড়ে ফেলেছে! (ভিজ্যুয়াল স্টুডিওতে মালিকানার অভ্যন্তরীণ পার্সার ব্যবহার করা হয়)।
রবিন ডেভিস


4

OWASP O2 প্ল্যাটফর্মে আপনি যা বলছেন ঠিক তা (সি # কোডের AST পার্সিং) আমি বাস্তবায়ন করেছি শার্পডাভলভ এএসটি এপিআই ব্যবহার প্রকল্পে সিএস সেটিকেই ।

গ্রাহ্য করা সহজ করার জন্য আমি একটি দ্রুত এপিআই লিখেছিলাম যা বেশ কয়েকটি মূল উত্স কোড উপাদানগুলি (বিবৃতি, প্রকার, পদ্ধতি, বৈশিষ্ট্য, ক্ষেত্র, মন্তব্যসমূহ ব্যবহার করে) প্রকাশ করে এবং মূল সি # কোডটি সি # তে এবং ভিবিএনইটিতে নতুন করে লিখতে সক্ষম হয় ।

আপনি এই এপিআইটিকে এই ও 2 এক্সরুল স্ক্রিপ্ট ফাইলটিতে ক্রিয়াকলাপে দেখতে পাবেন: ascx_View_SourceCode_AST.cs.o2

উদাহরণস্বরূপ আপনি কীভাবে একটি সি # উত্স কোড পাঠ্য প্রক্রিয়া করেন এবং প্রচুর ট্রিভিউজ এবং টেক্সটবক্সগুলি তৈরি করেন:

    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 এর উদাহরণ দেখায় যে আপনি কীভাবে উত্স কোডে কোনও প্রকার, পদ্ধতি, মন্তব্য ইত্যাদি নির্বাচন করতে এএসটি থেকে সংগ্রহ করা তথ্য ব্যবহার করতে পারেন ..

রেফারেন্সের জন্য এখানে এপিআই কোডটি লিখেছেন (নোট করুন যে শার্পডেভলফের সি # এএসটি পার্সার ব্যবহার করে এটি আমার প্রথম পাস, এবং এটি এখনও কীভাবে কাজ করে তা প্রায় আমি আমার মাথা পাচ্ছি):


হ্যাঁ এটিকে অন্তত আমি যা দেখেছি তার ভিত্তিতে সমাধানগুলির মধ্যে সবচেয়ে সহজ বলে মনে হচ্ছে। আমি একটি ভাল পার্সার খুঁজছিলাম এবং এই ব্লগকে হোঁচট খেয়েছি svengrand.blogspot.com/2010/10/… যাতে শার্পডেভলের সি # পার্সার কীভাবে ব্যবহার করতে হয় তারও বিশদ রয়েছে।
অ্যালেক্স

3

আমরা সম্প্রতি একটি সি # পার্সার প্রকাশ করেছি যা সমস্ত সি # 4.0 বৈশিষ্ট্য এবং নতুন অ্যাসিঙ্ক বৈশিষ্ট্যটি পরিচালনা করে: সি # পার্সার এবং কোডডোম

এই গ্রন্থাগারটি একটি শব্দার্থক অবজেক্ট মডেল তৈরি করে যা মন্তব্যগুলি এবং ফর্ম্যাটিংয়ের তথ্য ধরে রাখে এবং সংশোধন ও সংরক্ষণ করা যায়। এটি উত্স কোড বিশ্লেষণ করতে লিনকিউ প্রশ্নের ব্যবহারকে সমর্থন করে।



2

শার্প ডেভেলফ , একটি ওপেন সোর্স আইডিই, একটি দর্শনার্থী-ভিত্তিক কোড পার্সার নিয়ে আসে যা সত্যই ভাল কাজ করে। এটি আইডিইর বাইরে স্বাধীনভাবে ব্যবহার করা যেতে পারে।


2

সরাসরি সি # কোডটি পার্স করার পরিবর্তে একটি বিল্ট বাইনারিটিতে প্রতিবিম্ব ব্যবহার করার বিষয়টি বিবেচনা করুন। প্রতিবিম্ব এপিআই ব্যবহার করা সত্যিই সহজ এবং সম্ভবত আপনি আপনার প্রয়োজনীয় সমস্ত তথ্য পেতে পারেন?


3
প্রতিবিম্ব স্থিতিশীল বিশ্লেষণ করার একটি খারাপ উপায়; এটি কেবলমাত্র সেই তথ্য সরবরাহ করে যা প্রতিবিম্ব-যুক্তিটি বের করতে পারে (উদাঃ, "শ্রেণীর পদ্ধতিগুলির নাম") এটি বিশদ তথ্য সরবরাহ করে না ("এই কার্যভারের ডানদিকে কী আছে?") এবং এত কঠোরভাবে সেই ধরণের স্থিতিকে সীমাবদ্ধ করে দেয় বিশ্লেষণ এক কাজ করতে পারেন।
ইরা ব্যাক্সটার

@ ইরা বাক্সার কিছু সীমাবদ্ধতা রয়েছে তবে মনে রাখবেন আপনি প্রতিবিম্বের মাধ্যমে আইএল কোডটিও পেতে পারেন। এর অর্থ আপনি বুঝতে পারবেন কোন পদ্ধতিগুলি বলা হয়, কোনটি ভেরিয়েবলগুলিতে নির্ধারিত হয় ইত্যাদি many সমস্ত প্রতিফলক প্লাগইন কী করতে পারে তা দেখুন।
হলগ্রিম

প্রতিবিম্বের মাধ্যমে আপনি কীভাবে আসল আইএল কোড পাবেন? যতদূর আমি সচেতন প্রতিফলন এটি সরবরাহ করে না এবং আপনার সিসিআই ব্যবহার করা উচিত দেখুন: stackoverflow.com/questions/2824086/…
অ্যাশ

2

কটাক্ষপাত আছে গোল্ড পার্সার । এটির একটি খুব স্বজ্ঞাত আইইউ রয়েছে যা আপনাকে ইন্টারেক্টিভভাবে আপনার ব্যাকরণ পরীক্ষা করতে এবং সি # কোড তৈরি করতে দেয়। এর সাথে প্রচুর উদাহরণ পাওয়া যায় এবং এটি সম্পূর্ণ বিনামূল্যে।


2
ওপিতে এমন কিছু জিজ্ঞাসা করা হয়েছিল যা সি # কে পার্সার করতে পারে, সি # তে এমন কিছু নয় যা অন্য কিছুকে বিশ্লেষণ করে।
ইরা

2

সম্ভবত আপনি আয়রনটির সাথে irony.codeplex.com এ চেষ্টা করতে পারেন।

এটি খুব দ্রুত এবং এসি # ব্যাকরণ ইতিমধ্যে বিদ্যমান।

ব্যাকরণ নিজেই সিএন তে সরাসরি একটি বিএনএফের মতো লেখা হয় (কিছু অপারেটর ওভারলোড দিয়ে প্রাপ্ত)

এর সাথে সবচেয়ে ভাল জিনিসটি হল "ব্যাকরণ" সরাসরি এএসটি উত্পাদন করে produces


আয়রনির মন্তব্যসমূহ। সুতরাং এটি কমপক্ষে একটি সম্পূর্ণ বাস্তবায়ন নয়।
ভ্লাদিচ

2

আপনার অবশ্যই স্পষ্টভাবে রোজলিনটি পরীক্ষা করা উচিত যেহেতু এমএস এখানে অ্যাপাচি 2 লাইসেন্সের সাথে কোডটি সবেমাত্র খোলা হয়েছে (বা শীঘ্রই খুলবে) । আপনি গিটহাব থেকে এই কোডটি দিয়ে এই তথ্যটি পার্স করার একটি উপায়ও দেখতে পারেন


1

এমন কিছু যা গতি অর্জন করছে এবং কাজের জন্য খুব উপযুক্ত is

আপনি এনডিসি থেকে এই ভিডিওগুলিতে এটি কীভাবে সমাধান করতে পারে তা দেখতে পাবেন:


নিমেরল একটি প্রোগ্রামিং ভাষা। একটি দুর্দান্ত প্রোগ্রামিং ল্যাঙ্গুয়েজ, আমি সম্মত, তবে প্রশ্নটি ছিল # সি # এর ভিতরে সি # কোডটি কীভাবে পার্স করা যায়!
কিওয়ারটি

আপনি নিমেরলে নিয়ম তৈরি করেন এবং এটি সি # থেকে ব্যবহার করেন, পার্সারকে সি # তে থাকতে হবে এমন কিছুই বলেনি, তবে যাই হোক না কেন, ডাউনওয়েট করুন।
স্টাফেন

1

সি # তে নয়, একটি সম্পূর্ণ সি # 2/3/4 পার্সার যা সম্পূর্ণ এএসটি তৈরি করে তা আমাদের ডিএমএস সফ্টওয়্যার পুনর্নির্ধারণের সরঞ্জামদণ্ডে উপলব্ধ

ডিএমএস পার্সিং, গাছের বিল্ডিং, প্রতীক টেবিল ও প্রবাহ বিশ্লেষণ নির্মাণ, উত্স থেকে উত্স রূপান্তরকরণ এবং (সংশোধিত) এএসটি থেকে উত্স কোডের পুনঃজন্মের জন্য একটি বিস্তৃত অবকাঠামো সরবরাহ করে। (এটি কেবল সি # এর চেয়েও অনেক অন্যান্য ভাষা পরিচালনা করে))

সম্পাদনা (সেপ্টেম্বর) 2013: এই উত্তরটি সম্প্রতি আপডেট হয়নি। ডিএমএস দীর্ঘকাল ধরে সি # 5.0 পরিচালনা করেছে


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.