سلام و وقت بخیر خدمت همراهان وب سایت آموزشی پی وی لرن. با دوره کامل آموزش طراحی کامپایلر در خدمت شما عزیزان خواهیم بود. (Error Recovery) اصلاح خطا و طراحی کامپایلر را در این بخش مورد بررسی قرار خواهیم داد.
یک تجزیه گر باید بتواند هرگونه خطایی را در برنامه شناسایی و گزارش کند. انتظار می رود که هنگام بروز خطایی ، تجزیه کننده بتواند آن را مدیریت کند و تجزیه سایر قسمت ها را ادامه دهد. اغلب از تحلیلگر خطا انتظار می رود خطاها را بررسی کند اما ممکن است در مراحل مختلف فرآیند کامپایل خطایی رخ دهد. یک برنامه ممکن است انواع مختلفی از خطاها را در مراحل مختلف کامپایل داشته باشد:
انواع خطاهای مختلفی که در مراحل متفاوت کامپایل یک برنامه میتوانند وجود داشته باشند، به شرح زیر هستند:
هنگامی که یک تجزیه گر با خطایی در هر جایی از عبارت مواجه می شود ، با پردازش کردن ورودی خطا دار تا اولین جداکننده ، مانند نقطه ویرگول ، سایر موارد را نادیده می گیرد. این ساده ترین روش برای بازیابی خطا است و همچنین از ورود تجزیه گر به حلقه های بی انتها جلوگیری می کند.
وقتی یک تجزیه گر با یک خطا روبرو می شود ، سعی می کند تا از اقدامات اصلاحی استفاده کند تا بقیه ورودی های عبارت به تجزیه کمک کند تا به کار خود ادامه دهد. به عنوان مثال ، قرار دادن یک سیمیکالن فراموش شده یا جایگزینی کاما با نقطه ویرگول و غیره. طراحان پارس در این جا باید مراقب باشند زیرا یک اصلاح اشتباه ممکن است به یک حلقه نامحدود منجر شود.
برخی از خطاهای رایج برای طراحان کامپایلر که ممکن است در کد رخ دهد، شناخته شده است. علاوه بر این ، طراحان می توانند گرامر ارتقا یافته ای را ایجاد کنند که از این خطاها استفاده می کنند و وقتی که با این خطاها مواجه می شوند با سازه های خطایی که قبلا ایجاد شده است مقایسه می شوند.
تجزیه گر برنامه را به طور کلی در نظر می گیرد و سعی می کند بفهمد که این برنامه می خواهد چه کاری انجام دهد و سعی می کند نزدیک ترین مورد مطابق با آن را که بدون خطا است پیدا کند. هنگامی که یک ورودی (عبارت) با خطا بصورت X وارد تجزیه کننده می شود ، یک درخت تجزیه برای نزدیک ترین عبارت بدون خطای Y ایجاد می شود. این ممکن است به تجزیه کننده اجازه دهد تغییراتی جزئی را در کد منبع ایجاد کند ، اما به دلیل پیچیدگی (زمان و فضا) از این استراتژی ، هنوز ب صورت عملی استفاده نشده است.
تجزیه بازنمایی های درخت تجزیه توسط کامپایلر کار ساده ای نیست ، زیرا درخت ها حاوی جزئیات بیش تری از آنچه در واقع مورد نیاز است ، می باشند. درخت تجزیه زیر را به عنوان نمونه ببینید:
اگر با دقت مشاهده کنید، می بینیم که بیش تر گره های برگ تنها فرزندان گره های والد خود هستند. این اطلاعات را می توان قبل از ورود به مرحله بعدی از بین برد. با پنهان کردن اطلاعات اضافی ، می توانیم یک درخت را مانند شکل زیر بدست آوریم:
درخت مجرد را می توان به صورت زیر نشان داد:
AST ها ساختار داده های مهمی در کامپایلر دارای حداقل اطلاعات غیر ضروری هستند. AST ها نسبت به یک درخت تجزیه فشرده تر هستند و توسط یک کامپایلر به راحتی قابل استفاده است.
در این بخش از آموزش طراحی کامپایلر به بررسی (Error Recovery) اصلاح خطا و طراحی کامپایلر پرداختیم. در بخش بعدی تحلیل معنایی (Semantic Analysis) در طراحی کامپایلر را در دظر خواهیم گرفت. با ما همراه باشید.