کلا تحلیل معنایی را به دو دسته قسمت بندی می کنند یکی ایستا و دیگری پویا .
تحلیل معنایی ایستا در زمان کامپایل میسر است .:
1.بررسی همخوانی نوع متغیرها
مثلا کامپایلر پاسکال جمع دو عدد صحیح و اعشاری را خطا می دهد ، این خطا بدلیل همان تحلیلگرمعنایی ایستای این کامپایلر می باشد . در حالیکه همین تحلیلگرمعنایی در کامپایلر سی موقتا نوع مربوطه را به اعشاری تبدیل می کند و خطا نمی دهد . همچنین است برای اندیس آرایه ها مثلا اندیس اعشاری در آرایه در اکثر زبانهای برنامه نویسی معنایی ندارد و تحلیلگرمعنایی ایستا این خطا را کشف می کند .
2.یکی دیگر از وظایف تحلیلگرمعنایی ایستا چک کردن یکتا بودن متغیر می باشد . یعنی دو متغیر هم نام نمی توان در برنامه تعریف کرد .
دسته دیگر که تحلیلگرمعنایی ایستا وظیفه تشخیص آن را دارد ساختارهایی مثل حلقه های تو درتو می باشد که شروع وپایان آن باید توسط begin و end مشخص شده باشد . همچنین تعریف تابع باید با مورد استفاده آن همخوانی داشته باشد یعنی مثلا تابعی که یک پارامتر دارد نمی تواند با دو آرگومان صدا زده شود .
3.کنترل جریان دستورالعمل ها نیز از جمله وظایف تحلیلگر معنایی ایستا می باشد . یعنی مثلا استفاده از continue بیرون از حلقه اشتباه می باشد . و وظیفه این تحلیلگرمعنایی می باشد که این خطا را تشخیص دهد .
در تحلیل معنایی پویا چون اطلاعات لازم برای تشخیص کامپایلر در اختیارش قرار نمی گیرد کامپایلر مجبور است تا زمان اجرا صبر کند . مثلا بررسی اندیس آرایه ای که با متغیر I مقدار دهی می شود که آیا این اندیس از ماکسیموم اندیس آرایه بالاتر رفته است یا خیر .
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum