۰
subtitle
ارسال: #۱
  
کشف خطا در کامپایلر
سلام
این خطاها در کدام قسمت کامپایلر کشف میشه؟
۱/ int A[10.5]
۲/int A[10.5]=5
به نظر خودم اولی که واضح توسط پارسر هست.
دومی هم به نظرم باید پارسر باشه ولی تو کتاب فک کنم پوران بود نوشته در قسمت معنایی کشف میشه.
مگر تو قسمت معنایی فقط خطاهای نوع کشف نمیشه؟
نظر شما چیه؟
این خطاها در کدام قسمت کامپایلر کشف میشه؟
۱/ int A[10.5]
۲/int A[10.5]=5
به نظر خودم اولی که واضح توسط پارسر هست.
دومی هم به نظرم باید پارسر باشه ولی تو کتاب فک کنم پوران بود نوشته در قسمت معنایی کشف میشه.
مگر تو قسمت معنایی فقط خطاهای نوع کشف نمیشه؟
نظر شما چیه؟
۰
ارسال: #۲
  
RE: کشف خطا در کامپایلر
اتفاقاً من هم نظر شما رو داشتم، سر کلاس دکتر کارگهی بحث شد، ایشون گفتن که امکانش هست کاری کنیم که خطای دوم رو هم پارسر بگیره اما معمولش این هست که این نوع خطا در سطح معنایی بررسی میشه، دلیلشون هم این بود که این که اندیس آرایه یه عدد ثابت هست این جا، یه حالت خاص از حالتِ کلی ای هست که اندیس آرایه میتونه یک عبارت باشه و ارزیابی عبارت باید در بخش معنایی انجام بشه پس چون کلاً وقتی ما گرامر یک زبان رو مینویسیم اندیس آرایه رو یک expression قرار میدیم، این قسمت در تحلیل معنایی چک میشه
۰
ارسال: #۳
  
کشف خطا در کامپایلر
با این تحلیل که اولی هم میتونه توسط تحلیلگر معنایی کشف بشه چرا اون را با اطمینان میگه پارسر؟
۰
ارسال: #۴
  
RE: کشف خطا در کامپایلر
نه!
اون اولی declaration هست و توی declaration همیشه عدد داخل براکت باید یه const int باشه، هیچ وقت نمیشه توی تعریف یه آرایه، یه عبارت یا یه متغیر رو به عنوان سایز آرایه مشخص کرد! پس اولی رو همیشه پارسر میتونه چک کنه.
اون اولی declaration هست و توی declaration همیشه عدد داخل براکت باید یه const int باشه، هیچ وقت نمیشه توی تعریف یه آرایه، یه عبارت یا یه متغیر رو به عنوان سایز آرایه مشخص کرد! پس اولی رو همیشه پارسر میتونه چک کنه.
۰
ارسال: #۵
  
کشف خطا در کامپایلر
خوب توی قسمت declaration هم ما میتونیم به ارایه مقدار بدیم، هم جاوا هم سی وهم .....
به این دلیل قسمت دوم رو هم پارسر میتونه گیر بندازه !!!
البته ایراد قسمت ۲ اینه که به یه ارایه یه انتصاب غلط دادیم وهمچنین اندیس غلط
که تو غلط اول معنی ذرگیر میشه(انتصاب دارای معنی درستی نیست)
و دومی نحو (وقتی ما به جای اندیس توی گرامر از لفظ عبارت استفاده کنیم فقط طول مراحل پارس رو بیشتر میکنیم و همچنان ایراد اندیس برقراره چون اندیس مثلا نمی تونه عددی حقیقی باشه و ایراد رو پارسر پیدا میکنه)
تازه sepid توی تحلیل معنایی انتصاب های نادرست مثلا انتصاب مقدار ثابت به اسم یه تابع و این دست انتصابها کشف میشه و...
به این دلیل قسمت دوم رو هم پارسر میتونه گیر بندازه !!!
البته ایراد قسمت ۲ اینه که به یه ارایه یه انتصاب غلط دادیم وهمچنین اندیس غلط
که تو غلط اول معنی ذرگیر میشه(انتصاب دارای معنی درستی نیست)
و دومی نحو (وقتی ما به جای اندیس توی گرامر از لفظ عبارت استفاده کنیم فقط طول مراحل پارس رو بیشتر میکنیم و همچنان ایراد اندیس برقراره چون اندیس مثلا نمی تونه عددی حقیقی باشه و ایراد رو پارسر پیدا میکنه)
تازه sepid توی تحلیل معنایی انتصاب های نادرست مثلا انتصاب مقدار ثابت به اسم یه تابع و این دست انتصابها کشف میشه و...
۰
ارسال: #۶
  
کشف خطا در کامپایلر
مرسی samanium.
من هم بیشتر موافقم که به خاطر همون انتساب اشتباه باید تحلیلگر معنایی Error بگیره.
یعنی همونطور که خودت گفتی هم پارسر باید ایراد بگیره و هم در قسمت معنایی.
وفکر نکنم اصولا بتونیم کاری کنیم که پارسر خطای انتساب دستور ۲ رو بگیره چون پارسر که نوع عناصر را تشخیص نمیده.
اون حالتی که خطای دوم را پارسر هم بتونه بگیره برای وقتی هست که int نداشته باشه یعنی Declaration نباشه که در اون حالت خطای نوعی اتفاق نیفتاده.
من هم بیشتر موافقم که به خاطر همون انتساب اشتباه باید تحلیلگر معنایی Error بگیره.
یعنی همونطور که خودت گفتی هم پارسر باید ایراد بگیره و هم در قسمت معنایی.
وفکر نکنم اصولا بتونیم کاری کنیم که پارسر خطای انتساب دستور ۲ رو بگیره چون پارسر که نوع عناصر را تشخیص نمیده.
اون حالتی که خطای دوم را پارسر هم بتونه بگیره برای وقتی هست که int نداشته باشه یعنی Declaration نباشه که در اون حالت خطای نوعی اتفاق نیفتاده.
Can I see some ID?
Feeling left out?
نگران نباش، فقط روی این لینک برای ثبت نام کلیک کن. رمزت رو فراموش کردی؟ اینجا به یادت میاریم! close