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

کد میانه و بهینه سازی - MiladCr7 - 02 بهمن ۱۳۹۳ ۰۳:۰۶ ب.ظ

سلام دوستان!!!یه سوال من کتاب کامپایلر اقای شاپوری رو داریم!!ولی این ۲فصل اخرشون خیلی برام گنگه(کد میانی-بهینه سازی کد میانی)
میخواستم ببینم اگه کسی از بچه ها میتونه کمکی کنه!!از این ۲ فصل چه مطالبی مهمه؟؟؟
من کلا متوجهش نمیشمHuh

RE: کد میانه و بهینه سازی - bluebaran - 02 بهمن ۱۳۹۳ ۰۳:۱۵ ب.ظ

[quote='miladcr7' pid='328860' dateline='1421922991']
سلام دوستان!!!یه سوال من کتاب کامپایلر اقای شاپوری رو داریم!!ولی این ۲فصل اخرشون خیلی برام گنگه(کد میانی-بهینه سازی کد میانی)
میخواستم ببینم اگه کسی از بچه ها میتونه کمکی کنه!!از این ۲ فصل چه مطالبی مهمه؟؟؟
من کلا متوجهش نمیشمHuh
[/quot



جدول پرش و تعداد حافظه موقت رو سعی کن کار کنی البته من کتابم پوران هست ولی فک کنم خیلی سرفصلامون فرق نداشته باشه

RE: کد میانه و بهینه سازی - MiladCr7 - 02 بهمن ۱۳۹۳ ۰۳:۱۸ ب.ظ

کد پرش رو گفتن ولی چیزی از جدول پرش توش نیست

RE: کد میانه و بهینه سازی - bluebaran - 02 بهمن ۱۳۹۳ ۰۴:۲۲ ب.ظ

(۰۲ بهمن ۱۳۹۳ ۰۳:۱۸ ب.ظ)miladcr7 نوشته شده توسط:  کد پرش رو گفتن ولی چیزی از جدول پرش توش نیست

چند راه برای پیاده سازی case هستش
که یه را جدول پرش هست
جدول پرش اینگونه هستش که تو پرش ما غیر شرطی هست و از مقایسه تکراری جلوگیری میکنه اول عبارت شرطی case
ارزیابی میشه و مقدارش به عنوان آفست برای جدول پرش استفاده میشه
مثلا این دستور case رو داشته باش
case a
when 2
{st}
when 3
{st3}
when 4
{st 4}
when 5
{st 5}
when 9
{۶ st}


حالا جدولمون اینطوری میشه
ارزیابی a میذارش تو مثلا t1 دقت کن که میشه تفاوت مکان به ابتدای جدول اینجا چون از ۲ شروع میشه درسته a=2 هست ولی اولین مکان جدولمون میشه پس باید t1 برابر بشه با (a-2 )

jump L0+t1(شروع جدول پرش میشه از Lo و اینجا آفستش رو با t1 جمع کرده)


۱/ jump to L1 (برای پرش واسه when 2)

۲/ jump to L2 (برای پرش واسه when 3)

۳/ jump to L3 (برای پرش واسه when 4)

۴/ jump to L4 ( برای پرش واسه when 5)

۵/ jump to L5 ( واسه ۶ درسته که نداریم ولی ایراد جدول پرش اینه که باید واسه همه اونایی که تو محدوده هستند در نظر بگیره تا آدرسمون اشتباه نشه )

۶/ jump to L6

۷/ jump to L7

۸/ jump to L8 ( واسه ۹ هستش)

اندازه جدول پرش میشه تا اینجا از این به بعد رو دیگه جز جدول پرش نمیگیرن

L1:
st
jump L10

L2:

st2
jump L10

L3:

st3
jump L10
L4:

st4
jump L10
L5:

st5
jump L10

L9:
St6


L10:
بقیه دستورات بعد از case


شاید جایشو اشتباه کرده باشم اگه تناقض دیدی بگو