تالار گفتمان مانشت
تشخیص خطاهای وابسته به متن در برنامه - نسخه‌ی قابل چاپ

تشخیص خطاهای وابسته به متن در برنامه - sepid - 28 دى ۱۳۸۹ ۱۲:۲۶ ق.ظ

خطاهای وابسته به متن زیر توسط چه قسمتی و در چه زمانی تشخیص داده میشود؟
۱/ خارج از محدوده بودن اندیس آرایه
۲/دسترسی به آرایه دو بعدی با ۳ اندیس
۳/اعلان دوباره یک شناسه: مثلا int x رو داریم و دوباره Char x رو تعریف کنیم.
۴/دسترسی به یک شناسه خارج از بلوک آن
اولی رو سیستم عامل نمیتونه تشخیص بده و توسط کدهایی که توسط خود کامپایلر تولید میشه کشف میشه ولی زمانش رو نمیدونم موقع اجرا هست یا کامپایل.
۲و۳و۴هم به نظر میرسه باید توسط تحلیلگر معنایی در زمان کامپایل باشه.
نظر شما چیه؟

RE: تشخیص خطاهای وابسته به متن در برنامه - arshad90 - 28 دى ۱۳۸۹ ۱۱:۴۳ ق.ظ

(۲۸ دى ۱۳۸۹ ۱۲:۲۶ ق.ظ)sepid نوشته شده توسط:  خطاهای وابسته به متن زیر توسط چه قسمتی و در چه زمانی تشخیص داده میشود؟
۱/ خارج از محدوده بودن اندیس آرایه
۲/دسترسی به آرایه دو بعدی با ۳ اندیس
۳/اعلان دوباره یک شناسه: مثلا int x رو داریم و دوباره Char x رو تعریف کنیم.
۴/دسترسی به یک شناسه خارج از بلوک آن
اولی رو سیستم عامل نمیتونه تشخیص بده و توسط کدهایی که توسط خود کامپایلر تولید میشه کشف میشه ولی زمانش رو نمیدونم موقع اجرا هست یا کامپایل.
۲و۳و۴هم به نظر میرسه باید توسط تحلیلگر معنایی در زمان کامپایل باشه.
نظر شما چیه؟

اولی هم توسط تحلیلگر معنایی تشخیص داده می شه و قطعا در زمان اجرا. چون زمان ترجمه که مشخص نیست محدوده ارایه و اندیس‌ها چی هست و کل کنترل‌ها در زمان اجرا انجام می شه.
در مورد ۲ و ۳و ۴ باهات موافقم گمونم حق با تو باشه... اما مطمئن نیستمConfused

تشخیص خطاهای وابسته به متن در برنامه - samanium - 28 دى ۱۳۸۹ ۱۲:۴۲ ب.ظ

به نظر من قسمت چهار سوال زمان اجرا کشف میشه
به این دلیل که به مدیریت حافظه میتونه ربط داشته باشه
خودتون قضاوت کنید !
البته اطلاعات دامنه متغییر‌ها در جدول نماد‌ها ذخیره میشه و میتونه زمان کامپایل هم کشف بشه

RE: تشخیص خطاهای وابسته به متن در برنامه - sepid - 28 دى ۱۳۸۹ ۱۱:۰۸ ب.ظ

بچه‌ها یک سوال مرتبط با موضوع:
[تصویر:  attachment.php?aid=302]
چرا برای این سوال که برای سال ۸۲ هست ننوشته در زمان اجرا توسط تجزیه کننده مفهومی و نوشته توسط خود برنامه حاوی دستورات فوق.
چه فرقی بینشون هست؟

تشخیص خطاهای وابسته به متن در برنامه - _Milad_ - 30 دى ۱۳۸۹ ۰۱:۲۴ ق.ظ

همه موارد ۱و۳ و۴ جزو Semantic analysis هستند.

مورد ۱ تنها در زمان اجرا قابل کشف هست. دلیلش هم واضح هست flow برنامه مشخص می کنه که کی index چه مقداری می گیره. و میشه گفت توسط کد هایی که کامپایلر در لابه لای کد مقصد قرار میده کشف میشه.
مورد ۴و۲و۳ در مان کامپایل قابل کشف هست.

در مورد سوال سال ۸۲‌:

گزینه ۴ درست هست( به نظر من!). فرق بین گزینه ۳ و۴ اینه که گزینه ۳ میگه در زمان کامپایل خطا تشخیص داده میشه که این درست نیست. وقتی کامپایلر به چنین مواردی بر می خوره که اطلاع کافی برای بررسی نداشته باشه کد هایی برای بررسی در زمان اجرا تولید می کنه که این کدها در زمان اجرا بررسی می کنن که خطایی رخ نداده باشه.

RE: تشخیص خطاهای وابسته به متن در برنامه - sepid - 30 دى ۱۳۸۹ ۰۲:۲۷ ق.ظ

(۳۰ دى ۱۳۸۹ ۰۱:۲۴ ق.ظ)_Milad_ نوشته شده توسط:  همه موارد ۱و۳ و۴ جزو Semantic analysis هستند.

مورد ۱ تنها در زمان اجرا قابل کشف هست. دلیلش هم واضح هست flow برنامه مشخص می کنه که کی index چه مقداری می گیره. و میشه گفت توسط کد هایی که کامپایلر در لابه لای کد مقصد قرار میده کشف میشه.
مورد ۴و۲و۳ در مان کامپایل قابل کشف هست.

در مورد سوال سال ۸۲‌:

گزینه ۴ درست هست( به نظر من!). فرق بین گزینه ۳ و۴ اینه که گزینه ۳ میگه در زمان کامپایل خطا تشخیص داده میشه که این درست نیست. وقتی کامپایلر به چنین مواردی بر می خوره که اطلاع کافی برای بررسی نداشته باشه کد هایی برای بررسی در زمان اجرا تولید می کنه که این کدها در زمان اجرا بررسی می کنن که خطایی رخ نداده باشه.

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

تشخیص خطاهای وابسته به متن در برنامه - admin - 30 دى ۱۳۸۹ ۰۶:۲۳ ق.ظ

کامپایلر در واقع کدهایی شبیه try و catch داخل کد شما می‍گذاره. البته این کار هزینه سربار زیادی داره و برخی اوقات کامپایلرها بیخیالش می‍شن (مثل کامپایلرهای ++c)

در پاسخ دادن به این سوالات زمان bind رو در نظر داشته باشید. اعمالی که زمان bind اونها در زمان اجرای برنامه است رو تحلیلگر معنایی کاریش نمی‍تونه بکنه.

تشخیص خطاهای وابسته به متن در برنامه - hatami - 02 بهمن ۱۳۸۹ ۰۲:۱۲ ق.ظ

خطای خارج از محدوده بودن اندیس آرایه هم در زمان اجرا و هم در زمان کامپایل قابل شناسایی است
اگر مثلاً [۱۱] a در برنامه داشته باشیم و کل آرایه ۱۰ عنصر داشته باشد این در زمان کامپایل شناسایی میشود
ولی اگر مثلاً i=11 باشد و داشته باشیم a[i ] آنگاه این خطا در زمان اجرا کشف میشود.
در مورد تست هم گزینه ۴ درست است