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

follow (مشکل در پیاده سازی قانون سوم) - saba_1984 - 11 مهر ۱۳۸۹ ۱۰:۲۶ ب.ظ

سلام

من تو تشخیص follow مشکل دارم .Sad

در واقع تو پیاده سازی قانون سومش مشکل دارم .

کسی میتونه کمکم کنه؟

follow - parsaNA - 20 مهر ۱۳۸۹ ۰۲:۰۹ ب.ظ

follow(A) یعنی پایانه هایی که بلافاصله بعد از تولیدات A قرار می گیرن . پایانه می تونه از طریق یک غیر پایانه ای که بلافاصله بعد از A در هرجای گرامر اومده‌، باشه . اون سه قانون رو نمی خواد حفظ کنی . روش کنکوریش همین یه جمله اس که گفتم . من follow رو خوب بلدم . اگه مشکلت موردیه‌، مثالتو همینجا بذار من برات توضیح می دم .

RE: follow - saba_1984 - 20 مهر ۱۳۸۹ ۰۹:۴۵ ب.ظ

اول ممنون که توجه کردید.

همون مثالی که همه جا هست .مثال مربوط به گرامر که هم تو کتاب پارسه اومده و هم راهیان ارشد و آهو
میشه ریزتر واسم توضیح بدید که FOLLOW های E,T, F دقیقا چطور بدست امدند.
کد:
E->TE`
E`->+TE`|LAMBDA
T->FT`
T`->*FT|LAMBDA
F->(E)|ID
من خودم اومدم درخت اشتقاق گرامر رو کشیدم و هر چیزی ترمینالی که تو پیمایش بعد از اون متغیر قرار میگرفت رو FOLLOW در نظر گرفتم. ولی درست در نمیادUndecided

RE: follow - parsaNA - 20 مهر ۱۳۸۹ ۱۱:۴۶ ب.ظ

پاسخ سوال صبا:
اول سراغ E می ریم:
خوب طبق تعریفی که قبلا گفتم باید ببینید در کل گرامر بعد از E چه حرفها یا پایانه هایی قرار می گیرند . درسته ؟ خوب طبق قانون
کد:
F->(E)|ID
می بینیم بعد از E یک پرانتز بسته آمده‌، پس تو مجموعه فالوی E قرار می گیره . دیگه سمت راست هیچ کدام از قانون های گرامر E نمی بینیم . بنابراین:
فالوی E شامل( و $ میشه . $ به طور پیش فرض در فالوی عنصر شروع گرامر قرار داره .
خوب حالا می ریم سراغ `E:
با توجه به قانون زیر
کد:
E->TE`
چون این متغیر سمت راست E قرار گفته( یعنی در انتهای سمت راست )یعنی هر چی بعد E بیاد بعد 'E هم میاد( طبیعیه دیگه ؟! )پس فالوی 'E با فالوی E برابره .

می ریم سراغ T:
با توجه به قانون زیر
کد:
E`->+TE`|LAMBDA
بعد از T متغیر 'E قرار داره و این به معنی اینه که ابتدای 'E بعد از T میاد( پس First('E در Follow‌ی T قرار می گیره البته بدون لاندا )پس تا اینجا فالوی T میشه‌: +
خوب حالا طبق قانون زیر‌:
کد:
E->TE`
چون 'E می تونه لاندا بشه پس قانون فوق می تونه به شکل زیر تعبیر بشه:
کد:
E->T
چون این متغیر سمت راست E قرار گفته( یعنی در انتهای سمت راست )پس هر چی تو فالوی E باشه تو فالوی T هم میره‌، پس فالوی T برابره با‌: +, $,(

می ریم سراغ 'T:
با توجه به قانون زیر:
کد:
T->FT`
هرچی بعد از T بیاد بعد از 'T هم میاد . پس فالوی 'T برابر فالوی T میشه . بنابراین فالوی 'T برابره با‌: +, $,(

می ریم سراغ F که نکته های مهمی داره:
با توجه به قانون زیر:
کد:
T->FT`
بعد از F متغیر 'T میاد‌، یعنی ابتدای 'T بعد از F میاد . پس First('T که برابره با * رو به فالوی F اضافه می کنیم( دقت کن که لاندا رو نباید اضافه کنی ). اما نکته مهم اینجاست که طبق قانون زیر:
کد:
T`->*FT|LAMBDA

متغیر 'T می تونه لاندا بشه‌، پس می تونیم قانون قبلی رو به شکل زیر تعبیر کنیم:
کد:
T->F

طبق قانون فوق هرچی بعد از T بیاد( یعنی فالوی T )بعد از F هم میاد . بنابراین فالوی T رو به فالوی F اضافه می کنیم . فالوی F میشه‌: * , +, $,(
کل فالوها به صورت زیر در میاد:
  • فالوی E میشه( و $
  • فالوی 'E میشه( و $
  • فالوی T میشه‌: +, $,(
  • فالوی 'T میشه‌: +, $,(
  • فالوی F میشه *, +, $,(
نوشتنش خیلی سخت بود‌، بیچاره شدم .Wink سعی کردم خیلی ساده بگم . بازم اگه جاییش مشکل داشتی بگو توضیح می دم . شاد و پیروز باشی . Shy

RE: follow - mehr.iman - 05 دى ۱۳۸۹ ۱۲:۰۴ ق.ظ

ضمن تشکر از جناب parsaNA به خاطر توضیحات جامعشون،یه سوال در مورد followها برام پیش اومده.
گرامر زیر رو در نظر بگیرین:
A-->BCd
C-->lombda|a
در این شرایط آیا d هم جزء فالوی B حساب میشه؟(چون C به Lombda هم میره)
(البته فک نکنم بشه!،ولی خواستم مطمئن شم)

RE: follow - لهمشد - ۰۵ دى ۱۳۸۹ ۰۳:۴۱ ب.ظ

بله میشه:
به این دلیل که در این قانون A-->BCd اگر Cd رو به عنوان FIRST ترمینال B بگیرد اونوقت d در مجموعه follow غیر ترمینا ل B اضا فه میشه پس جز follow هستش

البته این نکته ای مهم هستش که یکی از سوالات کنکور هم بر همین اساس طرح شد

RE: follow - mehr.iman - 05 دى ۱۳۸۹ ۱۰:۴۶ ب.ظ

(۰۵ دى ۱۳۸۹ ۰۳:۴۱ ب.ظ)لهمشد نوشته شده توسط:  بله میشه:
به این دلیل که در این قانون A-->BCd اگر Cd رو به عنوان FIRST ترمینال B بگیرد اونوقت d در مجموعه follow غیر ترمینا ل B اضا فه میشه پس جز follow هستش
ممنون از پاسخت
من همیشه First غیر پایانه بعدی رو اضافه میکردم نه مجموعه پایانه و غیر پایانه‌ها رو،با این حساب باید First مجموعه پایانه‌ها و غیر پایانه های بعد از عنصر مورد نظر رو به فالو اضافه کرد.

(۰۵ دى ۱۳۸۹ ۰۳:۴۱ ب.ظ)لهمشد نوشته شده توسط:  البته این نکته ای مهم هستش که یکی از سوالات کنکور هم بر همین اساس طرح شد
من اینو از خودم در آوردم!ولی اگه تستشو میدیدم با این حساب حتما اشتباه میزدم.Big Grin

RE: follow - zahra412 - 21 دى ۱۳۹۰ ۰۹:۱۹ ق.ظ

میشه لطفا follow های 'E را بگید؟
میخوام بدونم آیا LL1 هست یا نه؟
ممنون

follow - - rasool - - 21 دى ۱۳۹۰ ۰۶:۰۲ ب.ظ

فالوی آن می شه‌: * و + و - و ] و [ .

LL1 نیست. چون برخورد first/follow داریم.

بازم خودتون بررسی کنید.

RE: follow - zahra412 - 25 دى ۱۳۹۰ ۰۲:۱۷ ب.ظ

(۲۱ دى ۱۳۹۰ ۰۶:۰۲ ب.ظ)yaali نوشته شده توسط:  فالوی آن می شه‌: * و + و - و ] و [ .

LL1 نیست. چون برخورد first/follow داریم.

بازم خودتون بررسی کنید.


ممنون
خودمم همین نظرو دارم اما آقای آل شیخ توی کتاب پوران میگن ll1 هست

follow - cprogrammer - 30 دى ۱۳۹۰ ۱۱:۵۰ ق.ظ

کتاب دکتر شاپوری خیلی خوب توضیح داده‌، اگر تونستید حتما تهیه کنید .

RE: follow (مشکل در پیاده سازی قانون سوم) - azad_ahmadi - 28 اردیبهشت ۱۳۹۲ ۱۱:۴۳ ب.ظ

پیرو درخواست دوستی مبنی بر سوالات زیر این تاپیک دوباره احیا شده. (تاپیک درسی زیر خاکی) Big Grin

سوالات:

۱. چرا در فالوی 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 (مشکل در پیاده سازی قانون سوم) - iBimS - 30 اردیبهشت ۱۳۹۲ ۱۲:۰۸ ق.ظ

سلام. خیلی ممنونم از شما دوست خوبم.

[تصویر:  15017133010695009401.jpg]

۱- اگر میشه در خصوص بدست آوردن FIRST و FOLLOW های E و 'E و OP بگویید؟

۲- این int هم پایانه هستش؟

------------------------------

۳- FOLLOW یک پایانه چی میشه؟

۴- زمانیکه مثلا فقط F-->id رو داریم (FOLLOW(F چی میشه؟

۵- توی کتاب اهو در قانون FOLLOW گفته A-->aBb الان توی اینجا a و b حروف کوچک اند پس هر دو پایانه اند درسته؟

ممنون.

RE: follow (مشکل در پیاده سازی قانون سوم) - azad_ahmadi - 31 اردیبهشت ۱۳۹۲ ۰۶:۲۳ ب.ظ

(۳۰ اردیبهشت ۱۳۹۲ ۱۲:۰۸ ق.ظ)iBimS نوشته شده توسط:  سلام. خیلی ممنونم از شما دوست خوبم.

[تصویر:  183468_15017133010695009401.jpg]

۱- اگر میشه در خصوص بدست آوردن FIRST و FOLLOW های E و 'E و OP بگویید؟

۲- این int هم پایانه هستش؟

------------------------------

۳- FOLLOW یک پایانه چی میشه؟

۴- زمانیکه مثلا فقط F-->id رو داریم (FOLLOW(F چی میشه؟

۵- توی کتاب اهو در قانون FOLLOW گفته A-->aBb الان توی اینجا a و b حروف کوچک اند پس هر دو پایانه اند درسته؟

ممنون.

سلام دوست عزیز.
چون سوال قبلی تون به این تاپیک ربط داشت (سوال از همین تاپیک مطرح شده بود) لازم بود که اینجا جواب داده بشه.
اما این سوال جدیدی که پرسیدید به این تاپیک ربط پیدا نمی کنه. اگر لطف کنید و برای این سوال یک عنوان جدید ایجاد کنید و سوالتون رو اونجا مطرح کنید ممنون خواهیم شد (در هرتاپیک یک سوال پرسیده میشه مگر اینکه سوال ادامه مباحث قبلی باشه).
سوالتون رو بپرسید در اسرع وقت جواب داده میشه.
سپاس.