نوشته شده توسط : مهراب مدیری

بیایید نگاهی به مطالب این زمینه بیندازیم. اگر عبارت if شرایط را برآورده نکند ، می توانم فرایند تشخیص را گزارش دهم. من می توانم گره های مربوط به درخت نحو فعلی را بدست آورم ، معمولاً محتوای این عبارت if است. بیایید پردازش را شروع کنیم ، ما این موضوع را نشان می دهیم ، از آنجا که در حالت اشکال زدایی هستیم ، می توانیم یک شی inc واقعی را در اینجا ببینیم. می توانیم ببینیم که این واقعاً یک عبارت if است. بیایید از مدل شی ساخته شده توسط Roslyn استفاده کنیم و آن را به مدل if دستور تبدیل کنیم.

 

در اینجا می توانم یک گره درخت نحوی بدست آورم که اتفاقاً یک کلاس مشتق شده از IfStatementSyntax است. می توانیم var ifStatement را به این مقدار اعلام کنیم. اکنون این تنها شیئی است که از این به بعد باید با آن تماس بگیریم و من دیگر دستور if را بررسی نمی کنم. اگر محتوای این عبارت مخدوش نباشد ، این مورد Block نامیده می شود ، به این معنی که این کد با مشخصات مطابقت ندارد. اگر به SyntaxKind.Block تعلق نداشته باشد ، خطایی را درخواست می کنم. من به کاربر خواهم گفت: "این درست نیست". اکنون باید نتیجه تشخیص را گزارش دهم. اما من هنوز آن را پیاده سازی نکرده ام. لازم است کمی عملیات refactoring انجام دهم تا یک متغیر محلی برای آن تولید کنم.

 

من می توانم از طریق Diagnostic تشخیص ایجاد کنم. ایجاد کنید ، که نیاز به ارائه برخی پارامترها دارد. ابتدا توصیفی به نام Rule وجود دارد و سپس باید مکان را مشخص کنم. یعنی وقتی مشکلی پیش می آید ، باید خطوط موج دار را در کد نمایش دهم. سپس باید مشخص کنم کدام قانون در حال حاضر نقض شده است. سپس مکانی را که با قوانین مطابقت ندارد مشخص کنید. اجازه دهید این پیاده سازی را برای تولید یک متغیر محلی مجدداً انجام دهیم. این تمام کاری است که من باید در حالت رفع اشکال انجام دهم.

 

بنابراین به اصطلاح "مکان" چیست؟ این گره ای است که من در حال حاضر روی آن کار می کنم: دستور if. بنابراین کجا باید اطلاعات سریع را قرار دهیم؟ اجازه دهید آن را در این کلمه کلیدی قرار داده است. دستور if در اینجا کلمه کلیدی if دارد ، زیرا این یک درخت نحوی بتونی است. این شامل تمام جزئیات اجرای کد در داخل ، از جمله تمام موقعیت ها است. بگذارید موقعیت مربوطه را از آن دریافت کنیم. در اینجا با روش GetLocation بدست می آید. ما موقعیت کلمه کلیدی if را بدست می آوریم و سپس این موقعیت را به این روش منتقل می کنیم. چند کد نوشتم بیایید این نقطه شکست را برداریم و به کار در خطایاب ادامه دهیم. بیایید کمی منتظر بمانیم و ببینیم چه اتفاقی افتاده است ، خوب ، حالا شما می بینید که در دستور if چنگال ظاهر می شود.

 

این تمام کاری است که من انجام می دهم: نوشتن سه یا چهار خط کد برای شناسایی مشکل و گفتن چارچوب از کجا مشکل را نشان دهد. برای اینکه به شما اثبات کنم که کار می کند ، من درمورد این کد توضیح دادم ، و خواهید فهمید که خطوط موج دار دیگر از بین رفته اند.

 

وقتی می خواهید عملیات پیچیده تری را اجرا کنید ، کمی دشوار می شود ، اما این یک مدل زبان نسبتاً ساده است ، زیرا شامل یک نحو کامل و معانی معنایی الزام آور است ، مردم می توانند از آن برای ساختن ابزار استفاده کنند ، سپس با دیگران به اشتراک بگذارند ، به طوری که هر کسی بتواند از ویرایشگر استفاده کند ، می تواند از اصول یکسانی در روند ویرایش C # پیروی کند ، البته به شرط آنکه بر اساس Roslyn باشد. مهم نیست که افراد در کدام پلتفرم قرار دارند ، آنها می توانند از آن بهره های زیادی ببرند.

 

آنالیز کننده ای که من نوشتم می تواند در حالت دسته ای نیز اجرا شود. این می تواند بخشی از فرآیند تدوین باشد و می تواند هشدارها یا خطاها را مانند آنچه که کامپایلر انجام می دهد پرچم گذاری کند. من همچنین می توانم یک ابزار تعمیر (اما قصد ندارم این ویژگی را در آینده نشان دهم) پیاده سازی کنم ، که می تواند کد را بر اساس قوانینی که وضع می کنیم ترمیم کند.

 

این نسخه آزمایشی Roslyn در اینجا است که چگونه به افراد کمک می کند تا یک تجربه کدگذاری بهتر ، یک تجربه بهتر توسعه C # را بدست آورند. این یک پایگاه کد بهتر و یک معماری بهتر به ما می دهد. بدیهی است که در C # ، می توانیم آزمایش Dogfood را بر روی آن انجام دهیم تا بهتر به پیشرفت زبان خود کمک کنیم.

https://academy.realm.io/cn/posts/goto-mads-torgersen-why-take-another-look-at-c-sharp/

 

 




:: برچسب‌ها: برنامه نویسی , کودکان ونوجوانان ,
:: بازدید از این مطلب : 1083
|
امتیاز مطلب : 2
|
تعداد امتیازدهندگان : 1
|
مجموع امتیاز : 1
تاریخ انتشار : شنبه 18 ارديبهشت 1400 | نظرات ()
مطالب مرتبط با این پست
لیست
می توانید دیدگاه خود را بنویسید


نام
آدرس ایمیل
وب سایت/بلاگ
:) :( ;) :D
;)) :X :? :P
:* =(( :O };-
:B /:) =DD :S
-) :-(( :-| :-))
نظر خصوصی

 کد را وارد نمایید:

آپلود عکس دلخواه: