دوره های آموزشی آکادمی پی وی لرن (پروژه محور و ویژه بازار کار)



  • ۱۶
  • اردیبهشت

جلسه ۱۲ : تحلیل معنایی (Semantic Analysis) – طراحی کامپایلر

  • دسته‌بندی‌ها :
جلسه ۱۲ : تحلیل معنایی (Semantic Analysis) – طراحی کامپایلر
    • جزئیات
    • نوع محتواآموزشی

      سلام و وقت بخیر خدمت همراهان وب سایت آموزشی پی وی لرن. با دوره کامل آموزش طراحی کامپایلر در خدمت شما عزیزان خواهیم بود. در این بخش از آموزش با تحلیل معنایی(Semantic Analysis) در طراحی کامپایلر همراه هستیم. بنابراین با ادامه ی مطالب همراه باشید.

      تحلیل معنایی(Semantic Analysis) در طراحی کامپایلر

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

      به عنوان مثال

      مثال : 

      محصول CFG فوق هیچ قاعده معنایی مرتبط مثل توکن ها و یا ساختارهای نحوی ندارد.

      مفاهیم

      تحلیل معنایی یک زبان، مانند سازه ها و ساختار نحوی به سازه های آن معنا می بخشد. تحلیل معنایی به تفسیر نمادها ، انواع آنها و روابط آن ها با همدیگر کمک می کند. تحلیل معنایی مشخص می کند که آیا ساختار نحوی ساخته شده در برنامه منبع معنایی دارد یا نه.

      مثال : 

      برای مثال :

      مثال : 

      در مرحله تحلیل واژه‌ ای و نحوی نباید خطایی ایجاد کند ، زیرا از نظر واژگانی و ساختاری صحیح است ، ولی می تواند خطایی معنایی ایجاد کند زیرا نوع انتساب متفاوت است. این قوانین توسط گرامر زبان تنظیم می شوند و در تحلیل معنایی ارزیابی می شود. کارهای زیر باید در تحلیل معنایی انجام شود:

      • تحلیل دامنه
      • بررسی نوع
      • بررسی کران های آرایه ای
      • خطاهای معنایی

      به برخی از خطاهای معنایی که انتظار می رود تحلیلگر معنایی آن ها را تشخیص دهد اشاره شده است :

      • عدم تطابق نوع
      • متغیر اعلام نشده
      • استفاده ی نادرست از شناسه رزرو شده
      • اعلامن چند باره ی متغیر در یک دامنه.
      • دسترسی به متغیر خارج از دامنه
      • عدم تطابق پارامتر واقعی و رسمی.

      گرامر صفت

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

      گرامر صفت یک واسطه برای ارائه تحلیل معنا شناختی گرامر مستقل از متن است و می تواند به مشخص کردن دستور زبان و معنا شناسی یک زبان برنامه نویسی کمک کند. گرامر صفت (هنگامی که به عنوان یک درخت تجزیه مشاهده می شود) می تواند مقادیر یا اطلاعاتی را بین گره های یک درخت جا به جا کند.

      مثال:

      مثال : 

      قسمت راست CFG شامل قوانین معنایی است که چگونگی تفسیر گرامر زبان را مشخص می کند. در این جا مقادیر غیر پایانی E و T به هم اضافه می شوند و نتیجه آن به E غیر پایانی کپی می شود.

      صفات معنا شناختی ممکن است در زمان تجزیه به مقادیرشان در دامنه انتساب داد و در زمان انتساب یا مشخص کردن شرط مورد ارزیابی قرار داد. بر طبق روش دریافت مقادیر از سوی صفات می توان آن ها را به طور گسترده به دو دسته تقسیم کرد: صفات ترکیبی و صفات موروثی.

      صفات ترکیبی (Synthesized attributes)

      این صفات از مقادیر صفات گره های فرزند ، مقادیرشان را دریافت می کنند. برای نشان دادن این مطلب،  محصول زیر را فرض کنید:

      مثال : 

      اگر S مقادیری را از گره های فرزند خود (A ، B ، C) بگیرد ، به آن صفت ترکیبی گفته می شود ، زیرا مقادیر ABC در S ترکیب می شود.

      همان طور که در مثال قبلی (E → E + T) ، گره والد E مقدار خود را از گره فرزندش دریافت می کند. صفت های ترکیبی هرگز از گره های والد یا هر گره هم نیا دیگر مقادیر خود را نمی گیرند.

      صفات موروثی (Inherited attributes)

      برخلاف صفات ترکیبی ، صفات موروثی می توانند مقادیر خود را از والد و یا هم نیای خود بگیرند. مانند ترکیب زیر ،

      مثال : 

      A می تواند مقادیری را از S ، B و C به دست آورد. B مقادیر خود را از S ، A و C می تواند دریافت کند. به همین ترتیب ، C می تواند مقادیر خود را از S ، A و B به دست آورد.

      گسترش یا بسط : منظور هنگامی است که یک آیتم غیر پایانی بر طبق یک قانون گرامری به شکل پایانی بسط می یابد.

       

      تحلیل معنایی(Semantic Analysis) در طراحی کامپایلر

      تحلیل معنایی(Semantic Analysis) در طراحی کامپایلر

      کاهش: وقتی است که یک ترمینال مطابق قوانین گرامر به غیر پایانی مربوطه کاهش می یابد. درخت های نحوی با روش بالا به پایین و چپ به راست تجزیه می شوند. هر زمان که کاهش رخ دهد ، قوانین (اعمال) معنایی مربوطه را اعمال می کنیم.

      تحلیل معنایی از ترجمه های جهت دار نحوی (Syntax-Directed Definitions) استفاده می کند تا وظایف فوق را انجام دهد.

      تحلیلگر معنایی (AST (Abstract syntax Tree را از مرحله قبلی (تحلیل نحو) دریافت می کند.

      تحلیلگر معنایی اطلاعات صفتی را به AST ، الحاق می کند که بدین صورت به آن AST گفته می شود.

      صفت ها شامل مقادیر دوتایی هستند ، <نام صفت، مقدار صفت>

      به عنوان مثال:

      مثال : 

      برای هر محصولی، ما یک قانون معنایی را ضمیمه می کنیم.

      S-attributed SDT

      اگر SDT فقط از صفات ترکیبی استفاده کند ، آن را SDT S-attributed می گویند. این صفت ها با استفاده از SDT های S-attributed ارزیابی می شوند که اقدامات معنایی این چنین SDT هایی پس از محصول (سمت راست) نوشته می شوند .

      تحلیل معنایی(Semantic Analysis) در طراحی کامپایلر

      تحلیل معنایی(Semantic Analysis) در طراحی کامپایلر

      همان طور که در بالا نشان داده شده است ، SDT های S-attributed در تجزیه ی پایین به بالا ارزیابی می شوند ، زیرا مقادیر گره های والد به مقادیر گره های کودک بستگی دارد.

      SDT های L-Attributed

      این شکل SDT از هر دو صفات ترکیبی و موروثی با محدودیت در گرفتن مقدار خود از هم نژاد راست، استفاده می کند.

      در SDT های L-Attributed، یک غیر پایانی می تواند از گره های والد ، کودک و هم نیا خود مقادیر خود را دریافت کند. مانند محصول زیر :

      مثال : 

      S می تواند مقادیر A ، B و C را به دست آورد (ترکیبی). A می تواند مقادیر را فقط از S بگیرد. B می تواند مقادیری را از S به دست آورد. C می تواند مقادیری را از S ، A دریافت کند و B. هیچ یک از آیتم غیر پایانی نمی تواند مقادیر خود را از هم نیای سمت راست شان به دست آورد.

      صفت ها در SDT های  L-Attributed با روش تجزیه عمق-نخست و چپ به راست ارزیابی می شوند.

       

      تحلیل معنایی(Semantic Analysis) در طراحی کامپایلر

      تحلیل معنایی(Semantic Analysis) در طراحی کامپایلر

      بنابراین نتیجه می گیریم که اگر تعریف S-attributed را داشته باشیم، بدین شکل شامل L-Attributed نیز می شود چون گرامرهای L-Attributed تعاریف S-attributed را محصور می کند.

      مبحث تحلیل معنایی(Semantic Analysis) در طراحی کامپایلر از مباحث طراحی کامپایلر را در این بخش به پایان می رسانیم.

      کلام پایانی

      تحلیل معنایی(Semantic Analysis) در طراحی کامپایلر را در این بخش از آموزش طراحی کامپایلر دنبال نمودیم. در جلسه ی آینده محیط Run-Time (زمان اجرا) در طراحی کامپایلر را مورد بررسی قرار خواهیم داد. بنابراین با ادامه ی جلسات آموزشی طراحی کامپایلر و وب سایت آموزشی پی وی لرن همراه باشید.

      QR:  جلسه ۱۲ : تحلیل معنایی (Semantic Analysis) – طراحی کامپایلر
      به اشتراک بگذارید