(۰۳ بهمن ۱۳۹۲ ۰۵:۱۱ ب.ظ)Riemann نوشته شده توسط: بسیار ممنونم از وقتی که گذاشتین!
مگه وقتی که ما یه این جور چیزی داریم A→α.Bβ {a,b,c} داشته باشیم و همچینی قانونی به فرم B→γ نیز داریم وقتی که میخواهیم closure بگیریم داریم
A→α.Bβ {a,b,c}
B→.γ
که lookahead این قانون جدید(ایتم lr(1 جدید) میشه first(β{a,b,c}) حالا توی این مسئله ای که ماداریم داریم:
S→.E {$}
و قانون E ----- E+T رو هم داریم حالا میشه :
E→.ET {first(β$)} که اینجا چون بتا لاندا هست میشه همون $ خودمون.
اگه میشه نحوه محاسبه خودتون رو بگید که کلا گیج شدم این دم کنکوری.!
خواهش میکنم.
چون میدونم خودمم ادم این دم آخری چقدر دوست داره سوالاش زود جواب پیدا کنه ، سعی میکنم تا جایی که وقتم اجازه بده سوالا رو جواب بدم. امیدوارم کمکی کرده باشم.
من از این چیزی که شما نوشتید کلا چیزی نفهمیدم. من خیلی اینجوری فرمولی نمیدونم چی بگم ، با مثال ساده میگم.
به طور کلی برای بدست آوردن LA ، باید ببینید تو همین مرحله که هستید بعد از اون متغییرتون چی اومده.
به طور کلی اول همه ی جابه جایی نقطه ها رو کامل بنویسید و بعد دونه دونه LA ها رو محاسبه کنید برای هر متغییر.
مثلا برای همین سوال ، برای بدست آوردن LA مربوط به S یعنی خط دوم ، باید ببینید تو عبارت های همین مرحله اونجاهایی که S. دارید بعد از S چی اومده ، توجه کنید مثلا اگر داشته باشیم AS. دیگه ای برامون مهم نیست ، حتما باید . قبل از S اومده باشه. که اینجا فقط میشه $ .
حالا میریم خط بعدی که سمت چپ E هست ، در عبارات این مرحله نگاه میکنید بعد از E. چه چیزهایی اومده که میشه + و $
خط بعدی هم که سمت چپش همون E هست پس همین بالایی میشه.
---------------------------------------------------------------------------------------
کارمون این مرحله تمام شد.
حالا به . ها نگاه میکنیم ، به ازای هر متغییری که بعد از . اومده به یه حالت میریم.
یکی از این متغییر ها E هست که مربوط به دو عبارته. عبارت دوم و سوم.
برای نوشتن حالات این مرحله نقطه ها رو که جابه جا میکنید. عباراتی که عینا از مرحله قبل هم اومده LA اون ها هیچ تغییری نمیکنه.
پس میشه . عبارت جدیدی هم که اضافه نمیشه . چون بعد از نقطه نان ترمینال نداریم که به جایی بره.
S→E. {$}
E→E.T {$,}
--------------------------------------------------------------------------------------------
برای مرحله بعد بعد از نقطه در مرحله قبل + اومده ، با پلاس به حالت زیر میریم
E→E.T {$,}
LA خود این عبارت که تغییری نمیکنه. ولی اینجا بعد از نقطه non terminal اومده پس قواعد T رو هم اضافه میکنیم
T→.id {$,}
برای این عبارت جدیدی که اضافه کردیم باید LA رو محاسبه کنیم. LA مربوط به T رو باید از عبارت اول همین مرحله محاسبه کنیم. برای محاسبه باید خود این نان ترمینال رو کنار بزاریم ، از مابقی چیزی که باقی میمونه متصل به تک تک اعضای LA عبارت First بگیریم و اجتماع اون ها میشه
برای این عبارت بعد از T چیزی باقی نمیمونه ، پس اگر از تک تک LA ها first بگیریم میشه خودشون.
ولی مثلا اگر داشتیم
E→E.Ta {$,}
اونوقت میشه :
First(a$\)∪First(a)=(a)
که حالا وقتی به جای a ، نان ترمینال داشته باشیم قضیه یه کم پیچیده تر میشه.
--------------------------------------------------------------------------------------------
بهتر از این واقعا بلد نبودم توضیح بدم!

من برم سراغ درس و مشقم ، سوالی بود بپرسید آخر شب چک میکنم.