۰
subtitle
ارسال: #۱
  
follow (مشکل در پیاده سازی قانون سوم)
سلام
من تو تشخیص follow مشکل دارم .
در واقع تو پیاده سازی قانون سومش مشکل دارم .
کسی میتونه کمکم کنه؟
من تو تشخیص follow مشکل دارم .
در واقع تو پیاده سازی قانون سومش مشکل دارم .
کسی میتونه کمکم کنه؟
۱
ارسال: #۲
  
follow
follow(A) یعنی پایانه هایی که بلافاصله بعد از تولیدات A قرار می گیرن . پایانه می تونه از طریق یک غیر پایانه ای که بلافاصله بعد از A در هرجای گرامر اومده، باشه . اون سه قانون رو نمی خواد حفظ کنی . روش کنکوریش همین یه جمله اس که گفتم . من follow رو خوب بلدم . اگه مشکلت موردیه، مثالتو همینجا بذار من برات توضیح می دم .
۰
ارسال: #۳
  
RE: follow
اول ممنون که توجه کردید.
همون مثالی که همه جا هست .مثال مربوط به گرامر که هم تو کتاب پارسه اومده و هم راهیان ارشد و آهو
میشه ریزتر واسم توضیح بدید که FOLLOW های E,T, F دقیقا چطور بدست امدند.
من خودم اومدم درخت اشتقاق گرامر رو کشیدم و هر چیزی ترمینالی که تو پیمایش بعد از اون متغیر قرار میگرفت رو FOLLOW در نظر گرفتم. ولی درست در نمیاد
همون مثالی که همه جا هست .مثال مربوط به گرامر که هم تو کتاب پارسه اومده و هم راهیان ارشد و آهو
میشه ریزتر واسم توضیح بدید که FOLLOW های E,T, F دقیقا چطور بدست امدند.
کد:
E->TE`
E`->+TE`|LAMBDA
T->FT`
T`->*FT|LAMBDA
F->(E)|ID
ارسال: #۴
  
RE: follow
پاسخ سوال صبا:
اول سراغ E می ریم:
خوب طبق تعریفی که قبلا گفتم باید ببینید در کل گرامر بعد از E چه حرفها یا پایانه هایی قرار می گیرند . درسته ؟ خوب طبق قانون
می بینیم بعد از E یک پرانتز بسته آمده، پس تو مجموعه فالوی E قرار می گیره . دیگه سمت راست هیچ کدام از قانون های گرامر E نمی بینیم . بنابراین:
فالوی E شامل( و $ میشه . $ به طور پیش فرض در فالوی عنصر شروع گرامر قرار داره .
خوب حالا می ریم سراغ `E:
با توجه به قانون زیر
چون این متغیر سمت راست E قرار گفته( یعنی در انتهای سمت راست )یعنی هر چی بعد E بیاد بعد 'E هم میاد( طبیعیه دیگه ؟! )پس فالوی 'E با فالوی E برابره .
می ریم سراغ T:
با توجه به قانون زیر
بعد از T متغیر 'E قرار داره و این به معنی اینه که ابتدای 'E بعد از T میاد( پس First('E در Followی T قرار می گیره البته بدون لاندا )پس تا اینجا فالوی T میشه: +
خوب حالا طبق قانون زیر:
چون 'E می تونه لاندا بشه پس قانون فوق می تونه به شکل زیر تعبیر بشه:
چون این متغیر سمت راست E قرار گفته( یعنی در انتهای سمت راست )پس هر چی تو فالوی E باشه تو فالوی T هم میره، پس فالوی T برابره با: +, $,(
می ریم سراغ 'T:
با توجه به قانون زیر:
هرچی بعد از T بیاد بعد از 'T هم میاد . پس فالوی 'T برابر فالوی T میشه . بنابراین فالوی 'T برابره با: +, $,(
می ریم سراغ F که نکته های مهمی داره:
با توجه به قانون زیر:
بعد از F متغیر 'T میاد، یعنی ابتدای 'T بعد از F میاد . پس First('T که برابره با * رو به فالوی F اضافه می کنیم( دقت کن که لاندا رو نباید اضافه کنی ). اما نکته مهم اینجاست که طبق قانون زیر:
متغیر 'T می تونه لاندا بشه، پس می تونیم قانون قبلی رو به شکل زیر تعبیر کنیم:
طبق قانون فوق هرچی بعد از T بیاد( یعنی فالوی T )بعد از F هم میاد . بنابراین فالوی T رو به فالوی F اضافه می کنیم . فالوی F میشه: * , +, $,(
کل فالوها به صورت زیر در میاد:
اول سراغ E می ریم:
خوب طبق تعریفی که قبلا گفتم باید ببینید در کل گرامر بعد از E چه حرفها یا پایانه هایی قرار می گیرند . درسته ؟ خوب طبق قانون
کد:
F->(E)|ID
فالوی E شامل( و $ میشه . $ به طور پیش فرض در فالوی عنصر شروع گرامر قرار داره .
خوب حالا می ریم سراغ `E:
با توجه به قانون زیر
کد:
E->TE`
می ریم سراغ T:
با توجه به قانون زیر
کد:
E`->+TE`|LAMBDA
خوب حالا طبق قانون زیر:
کد:
E->TE`
کد:
E->T
می ریم سراغ 'T:
با توجه به قانون زیر:
کد:
T->FT`
می ریم سراغ F که نکته های مهمی داره:
با توجه به قانون زیر:
کد:
T->FT`
کد:
T`->*FT|LAMBDA
متغیر 'T می تونه لاندا بشه، پس می تونیم قانون قبلی رو به شکل زیر تعبیر کنیم:
کد:
T->F
طبق قانون فوق هرچی بعد از T بیاد( یعنی فالوی T )بعد از F هم میاد . بنابراین فالوی T رو به فالوی F اضافه می کنیم . فالوی F میشه: * , +, $,(
کل فالوها به صورت زیر در میاد:
- فالوی E میشه( و $
- فالوی 'E میشه( و $
- فالوی T میشه: +, $,(
- فالوی 'T میشه: +, $,(
- فالوی F میشه *, +, $,(
۰
ارسال: #۵
  
RE: follow
ضمن تشکر از جناب parsaNA به خاطر توضیحات جامعشون،یه سوال در مورد followها برام پیش اومده.
گرامر زیر رو در نظر بگیرین:
A-->BCd
C-->lombda|a
در این شرایط آیا d هم جزء فالوی B حساب میشه؟(چون C به Lombda هم میره)
(البته فک نکنم بشه!،ولی خواستم مطمئن شم)
گرامر زیر رو در نظر بگیرین:
A-->BCd
C-->lombda|a
در این شرایط آیا d هم جزء فالوی B حساب میشه؟(چون C به Lombda هم میره)
(البته فک نکنم بشه!،ولی خواستم مطمئن شم)
۰
ارسال: #۶
  
RE: follow
بله میشه:
به این دلیل که در این قانون A-->BCd اگر Cd رو به عنوان FIRST ترمینال B بگیرد اونوقت d در مجموعه follow غیر ترمینا ل B اضا فه میشه پس جز follow هستش
البته این نکته ای مهم هستش که یکی از سوالات کنکور هم بر همین اساس طرح شد
به این دلیل که در این قانون A-->BCd اگر Cd رو به عنوان FIRST ترمینال B بگیرد اونوقت d در مجموعه follow غیر ترمینا ل B اضا فه میشه پس جز follow هستش
البته این نکته ای مهم هستش که یکی از سوالات کنکور هم بر همین اساس طرح شد
ارسال: #۷
  
RE: follow
(۰۵ دى ۱۳۸۹ ۰۳:۴۱ ب.ظ)لهمشد نوشته شده توسط: بله میشه:ممنون از پاسخت
به این دلیل که در این قانون A-->BCd اگر Cd رو به عنوان FIRST ترمینال B بگیرد اونوقت d در مجموعه follow غیر ترمینا ل B اضا فه میشه پس جز follow هستش
من همیشه First غیر پایانه بعدی رو اضافه میکردم نه مجموعه پایانه و غیر پایانهها رو،با این حساب باید First مجموعه پایانهها و غیر پایانه های بعد از عنصر مورد نظر رو به فالو اضافه کرد.
(۰۵ دى ۱۳۸۹ ۰۳:۴۱ ب.ظ)لهمشد نوشته شده توسط: البته این نکته ای مهم هستش که یکی از سوالات کنکور هم بر همین اساس طرح شدمن اینو از خودم در آوردم!ولی اگه تستشو میدیدم با این حساب حتما اشتباه میزدم.
۰
ارسال: #۸
  
RE: follow
میشه لطفا follow های 'E را بگید؟
میخوام بدونم آیا LL1 هست یا نه؟
ممنون
میخوام بدونم آیا LL1 هست یا نه؟
ممنون
۰
ارسال: #۹
  
follow
فالوی آن می شه: * و + و - و ] و [ .
LL1 نیست. چون برخورد first/follow داریم.
بازم خودتون بررسی کنید.
LL1 نیست. چون برخورد first/follow داریم.
بازم خودتون بررسی کنید.
ارسال: #۱۰
  
RE: follow
۰
۰
ارسال: #۱۲
  
RE: follow (مشکل در پیاده سازی قانون سوم)
پیرو درخواست دوستی مبنی بر سوالات زیر این تاپیک دوباره احیا شده. (تاپیک درسی زیر خاکی)
سوالات:
۱. چرا در فالوی E ترمینال id نیز قرار نگرفت؟
۲. چرا در محاسبه first ترمینال id قرار میگیرد اما در follow نه؟
پس این | (یا) در (F->(E)|ID) به چه دردی می خوره؟
اصلا می تونید یه تعریف مشخص از علامت | (یا) بدهید که چطور باید تفسرش کرد؟
۳. برای محاسبه فالوی E از کجا فهمیدیم که باید از F->(E)|ID شروع کنیم چرا از E->T و E'->TE شروع نکردیم؟
۴. اگر به اون گرامر، قانون 'Z-->id E|E' T اضافه بشه فالوی E چه تغییری می کند؟ لطفا توضیحات ساده و کامل بدهید.
-------------------------------------------------------------------------------------------------------------------------------------
جواب سوال اول: برای پیدا کردن fallow/E/ باید عناصری که بعد از غیرپایانه E در گرامر بیایند رو بعنوان fallow انتخاب کنیم.
همونطور که در گرامر هم می بینیم بعد از غیرپایانه E در قانون F---> (E) | id پایانه ( قرار گرفته شده که بعنوان fallow/E/ انتخاب میشه.
همونطور که می دونیم هم در ابتدای کار علامت $ به ابتدای قوانین اضافه می شه. به این صورت: E` ---> E$ پس علامت $ هم یکی دیگه از fallowهای E بحساب میاد.
اما id اصلا بعنوان fallow/E/ بحساب نمیاد چون در هیچ صورتی بعد از کاهش E عبارت پایانه id رو نمی بینیم.
جواب سوال دو: عبارت پایانه id رو میشه به این صورت از عبارت غیرپایانه E بدست آورد: E---->TE` .. T---->FT` .. F---->id
پس id رو میشه جزو first/E/ بحساب اورد. اما چرا جزو fallow نیست رو در بالا توضیح دادم.
علامت | یک علامت جداکننده هست که میگه از بین این چندتا قانون یکی رو باید انتخاب کرد. پس F->(E)|ID میگه که غیرپایانه F میتونه به این دوتا قانون تبدیل بشه.
جواب سوال سه: اصلا نیازی نیست که ما از یک جای بخصوصی شروع به پیدا کردن fallow بری غیرپایانه ها باشیم. فقط کافیه قوانینی که برای پیدا کردن fallow وجود داره رو بلد باشیم، پس مهم نیست که از کدوم قانون اول استفاده کنیم.
جواب سوال چهار: اگه اون قانون به گرامر اضافه بشه، تمام fallowهای Z به fallowی E هم اضافه میشه. چرا که با کاهش این قانون
Z-->id E هرچی درانتهای Z باشه حتما در انتهای E هم هست. تو همین گرامر هم قانونی هست بصورت : [tex]T->FT`[/tex] دراین قانون هم تمام fallowهای T به fallowی T` اضافه میشه. یکی از قانونهای پیدا کردن fallow هست.
براساس گرامر زیر:
سوالات:
۱. چرا در فالوی E ترمینال id نیز قرار نگرفت؟
۲. چرا در محاسبه first ترمینال id قرار میگیرد اما در follow نه؟
پس این | (یا) در (F->(E)|ID) به چه دردی می خوره؟
اصلا می تونید یه تعریف مشخص از علامت | (یا) بدهید که چطور باید تفسرش کرد؟
۳. برای محاسبه فالوی E از کجا فهمیدیم که باید از F->(E)|ID شروع کنیم چرا از E->T و E'->TE شروع نکردیم؟
۴. اگر به اون گرامر، قانون 'Z-->id E|E' T اضافه بشه فالوی E چه تغییری می کند؟ لطفا توضیحات ساده و کامل بدهید.
-------------------------------------------------------------------------------------------------------------------------------------
جواب سوال اول: برای پیدا کردن fallow/E/ باید عناصری که بعد از غیرپایانه E در گرامر بیایند رو بعنوان fallow انتخاب کنیم.
همونطور که در گرامر هم می بینیم بعد از غیرپایانه E در قانون F---> (E) | id پایانه ( قرار گرفته شده که بعنوان fallow/E/ انتخاب میشه.
همونطور که می دونیم هم در ابتدای کار علامت $ به ابتدای قوانین اضافه می شه. به این صورت: E` ---> E$ پس علامت $ هم یکی دیگه از fallowهای E بحساب میاد.
اما id اصلا بعنوان fallow/E/ بحساب نمیاد چون در هیچ صورتی بعد از کاهش E عبارت پایانه id رو نمی بینیم.
جواب سوال دو: عبارت پایانه id رو میشه به این صورت از عبارت غیرپایانه E بدست آورد: E---->TE` .. T---->FT` .. F---->id
پس id رو میشه جزو first/E/ بحساب اورد. اما چرا جزو fallow نیست رو در بالا توضیح دادم.
علامت | یک علامت جداکننده هست که میگه از بین این چندتا قانون یکی رو باید انتخاب کرد. پس F->(E)|ID میگه که غیرپایانه F میتونه به این دوتا قانون تبدیل بشه.
جواب سوال سه: اصلا نیازی نیست که ما از یک جای بخصوصی شروع به پیدا کردن fallow بری غیرپایانه ها باشیم. فقط کافیه قوانینی که برای پیدا کردن fallow وجود داره رو بلد باشیم، پس مهم نیست که از کدوم قانون اول استفاده کنیم.
جواب سوال چهار: اگه اون قانون به گرامر اضافه بشه، تمام fallowهای Z به fallowی E هم اضافه میشه. چرا که با کاهش این قانون
Z-->id E هرچی درانتهای Z باشه حتما در انتهای E هم هست. تو همین گرامر هم قانونی هست بصورت : [tex]T->FT`[/tex] دراین قانون هم تمام fallowهای T به fallowی T` اضافه میشه. یکی از قانونهای پیدا کردن fallow هست.
براساس گرامر زیر:
کد:
E->TE`
E`->+TE`|LAMBDA
T->FT`
T`->*FT|LAMBDA
F->(E)|ID
۰
ارسال: #۱۳
  
RE: follow (مشکل در پیاده سازی قانون سوم)
سلام. خیلی ممنونم از شما دوست خوبم.
۱- اگر میشه در خصوص بدست آوردن FIRST و FOLLOW های E و 'E و OP بگویید؟
۲- این int هم پایانه هستش؟
------------------------------
۳- FOLLOW یک پایانه چی میشه؟
۴- زمانیکه مثلا فقط F-->id رو داریم (FOLLOW(F چی میشه؟
۵- توی کتاب اهو در قانون FOLLOW گفته A-->aBb الان توی اینجا a و b حروف کوچک اند پس هر دو پایانه اند درسته؟
ممنون.
۱- اگر میشه در خصوص بدست آوردن FIRST و FOLLOW های E و 'E و OP بگویید؟
۲- این int هم پایانه هستش؟
------------------------------
۳- FOLLOW یک پایانه چی میشه؟
۴- زمانیکه مثلا فقط F-->id رو داریم (FOLLOW(F چی میشه؟
۵- توی کتاب اهو در قانون FOLLOW گفته A-->aBb الان توی اینجا a و b حروف کوچک اند پس هر دو پایانه اند درسته؟
ممنون.
ارسال: #۱۴
  
RE: follow (مشکل در پیاده سازی قانون سوم)
(۳۰ اردیبهشت ۱۳۹۲ ۱۲:۰۸ ق.ظ)iBimS نوشته شده توسط: سلام. خیلی ممنونم از شما دوست خوبم.
۱- اگر میشه در خصوص بدست آوردن FIRST و FOLLOW های E و 'E و OP بگویید؟
۲- این int هم پایانه هستش؟
------------------------------
۳- FOLLOW یک پایانه چی میشه؟
۴- زمانیکه مثلا فقط F-->id رو داریم (FOLLOW(F چی میشه؟
۵- توی کتاب اهو در قانون FOLLOW گفته A-->aBb الان توی اینجا a و b حروف کوچک اند پس هر دو پایانه اند درسته؟
ممنون.
سلام دوست عزیز.
چون سوال قبلی تون به این تاپیک ربط داشت (سوال از همین تاپیک مطرح شده بود) لازم بود که اینجا جواب داده بشه.
اما این سوال جدیدی که پرسیدید به این تاپیک ربط پیدا نمی کنه. اگر لطف کنید و برای این سوال یک عنوان جدید ایجاد کنید و سوالتون رو اونجا مطرح کنید ممنون خواهیم شد (در هرتاپیک یک سوال پرسیده میشه مگر اینکه سوال ادامه مباحث قبلی باشه).
سوالتون رو بپرسید در اسرع وقت جواب داده میشه.
سپاس.
Can I see some ID?
Feeling left out?
نگران نباش، فقط روی این لینک برای ثبت نام کلیک کن. رمزت رو فراموش کردی؟ اینجا به یادت میاریم! close