সি # কোড পার্সিংয়ের জন্য কোন পার্সার উপলব্ধ?
আমি একটি সি # পার্সার সন্ধান করছি যা সি # তে ব্যবহার করা যেতে পারে এবং বিশ্লেষণ কোডের প্রতিটি প্রত্নতত্ত্ব সম্পর্কে লাইন এবং ফাইল ফাইলের তথ্য অ্যাক্সেস আমাকে দেয়।
সি # কোড পার্সিংয়ের জন্য কোন পার্সার উপলব্ধ?
আমি একটি সি # পার্সার সন্ধান করছি যা সি # তে ব্যবহার করা যেতে পারে এবং বিশ্লেষণ কোডের প্রতিটি প্রত্নতত্ত্ব সম্পর্কে লাইন এবং ফাইল ফাইলের তথ্য অ্যাক্সেস আমাকে দেয়।
উত্তর:
উত্স কোডে কাজ করে:
সমাবেশে কাজ করে:
সমাবেশ "পার্সিং" এর সমস্যাটি হ'ল আমাদের কাছে লাইন এবং ফাইল সম্পর্কে কম তথ্য রয়েছে (তথ্যগুলি .pdb ফাইলের উপর ভিত্তি করে রয়েছে, এবং পিডিবিতে কেবল পদ্ধতিগুলির জন্য লাইন সম্পর্কিত তথ্য রয়েছে)
আমি ব্যক্তিগতভাবে মনো - সিসিল এবং এনআরফ্যাক্টরির প্রস্তাব দিই ।
আপনি যদি নেট # সমাবেশগুলিতে সি # 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
CodeDomProvider.Parse()
পদ্ধতিটি দেখুন।
আপনি যদি এএনটিএলআরের সাথে পরিচিত হন তবে আপনি অ্যান্টাল সি # ব্যাকরণ ব্যবহার করতে পারেন ।
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 এর উদাহরণ দেখায় যে আপনি কীভাবে উত্স কোডে কোনও প্রকার, পদ্ধতি, মন্তব্য ইত্যাদি নির্বাচন করতে এএসটি থেকে সংগ্রহ করা তথ্য ব্যবহার করতে পারেন ..
রেফারেন্সের জন্য এখানে এপিআই কোডটি লিখেছেন (নোট করুন যে শার্পডেভলফের সি # এএসটি পার্সার ব্যবহার করে এটি আমার প্রথম পাস, এবং এটি এখনও কীভাবে কাজ করে তা প্রায় আমি আমার মাথা পাচ্ছি):
আমরা সম্প্রতি একটি সি # পার্সার প্রকাশ করেছি যা সমস্ত সি # 4.0 বৈশিষ্ট্য এবং নতুন অ্যাসিঙ্ক বৈশিষ্ট্যটি পরিচালনা করে: সি # পার্সার এবং কোডডোম
এই গ্রন্থাগারটি একটি শব্দার্থক অবজেক্ট মডেল তৈরি করে যা মন্তব্যগুলি এবং ফর্ম্যাটিংয়ের তথ্য ধরে রাখে এবং সংশোধন ও সংরক্ষণ করা যায়। এটি উত্স কোড বিশ্লেষণ করতে লিনকিউ প্রশ্নের ব্যবহারকে সমর্থন করে।
শার্প ডেভেলফ , একটি ওপেন সোর্স আইডিই, একটি দর্শনার্থী-ভিত্তিক কোড পার্সার নিয়ে আসে যা সত্যই ভাল কাজ করে। এটি আইডিইর বাইরে স্বাধীনভাবে ব্যবহার করা যেতে পারে।
সরাসরি সি # কোডটি পার্স করার পরিবর্তে একটি বিল্ট বাইনারিটিতে প্রতিবিম্ব ব্যবহার করার বিষয়টি বিবেচনা করুন। প্রতিবিম্ব এপিআই ব্যবহার করা সত্যিই সহজ এবং সম্ভবত আপনি আপনার প্রয়োজনীয় সমস্ত তথ্য পেতে পারেন?
কটাক্ষপাত আছে গোল্ড পার্সার । এটির একটি খুব স্বজ্ঞাত আইইউ রয়েছে যা আপনাকে ইন্টারেক্টিভভাবে আপনার ব্যাকরণ পরীক্ষা করতে এবং সি # কোড তৈরি করতে দেয়। এর সাথে প্রচুর উদাহরণ পাওয়া যায় এবং এটি সম্পূর্ণ বিনামূল্যে।
সম্ভবত আপনি আয়রনটির সাথে irony.codeplex.com এ চেষ্টা করতে পারেন।
এটি খুব দ্রুত এবং এসি # ব্যাকরণ ইতিমধ্যে বিদ্যমান।
ব্যাকরণ নিজেই সিএন তে সরাসরি একটি বিএনএফের মতো লেখা হয় (কিছু অপারেটর ওভারলোড দিয়ে প্রাপ্ত)
এর সাথে সবচেয়ে ভাল জিনিসটি হল "ব্যাকরণ" সরাসরি এএসটি উত্পাদন করে produces
আপনার অবশ্যই স্পষ্টভাবে রোজলিনটি পরীক্ষা করা উচিত যেহেতু এমএস এখানে অ্যাপাচি 2 লাইসেন্সের সাথে কোডটি সবেমাত্র খোলা হয়েছে (বা শীঘ্রই খুলবে) । আপনি গিটহাব থেকে এই কোডটি দিয়ে এই তথ্যটি পার্স করার একটি উপায়ও দেখতে পারেন ।
এমন কিছু যা গতি অর্জন করছে এবং কাজের জন্য খুব উপযুক্ত is
আপনি এনডিসি থেকে এই ভিডিওগুলিতে এটি কীভাবে সমাধান করতে পারে তা দেখতে পাবেন:
সি # তে নয়, একটি সম্পূর্ণ সি # 2/3/4 পার্সার যা সম্পূর্ণ এএসটি তৈরি করে তা আমাদের ডিএমএস সফ্টওয়্যার পুনর্নির্ধারণের সরঞ্জামদণ্ডে উপলব্ধ ।
ডিএমএস পার্সিং, গাছের বিল্ডিং, প্রতীক টেবিল ও প্রবাহ বিশ্লেষণ নির্মাণ, উত্স থেকে উত্স রূপান্তরকরণ এবং (সংশোধিত) এএসটি থেকে উত্স কোডের পুনঃজন্মের জন্য একটি বিস্তৃত অবকাঠামো সরবরাহ করে। (এটি কেবল সি # এর চেয়েও অনেক অন্যান্য ভাষা পরিচালনা করে))
সম্পাদনা (সেপ্টেম্বর) 2013: এই উত্তরটি সম্প্রতি আপডেট হয়নি। ডিএমএস দীর্ঘকাল ধরে সি # 5.0 পরিচালনা করেছে
আপনি যদি নিজের পার্সার (যা মজাদার) লিখতে ইচ্ছুক হন তবে জিপিপিজি কার্যকর হতে পারে।