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

Loop در بدست آوردن Follow - H-Arshad - 19 دى ۱۳۹۲ ۰۲:۲۰ ق.ظ

سلام
من برای بدست اوردن follow یک گرامر مشکل دارم،یعنی هر کدم که مخواهم بدست بیارم ، نیاز به داشتن Follow دیگری هست و انگار افتاده توی loop Huh
مثلا باید follow A رو بریمز توی follow B و بعد خود follow B برای بدست اوردنش باید follow c حساب کنم باز follow c نیاز به ...

RE: حلقه در بدست آوردن Follow - AEM4949 - 19 دى ۱۳۹۲ ۰۳:۲۹ ق.ظ

(۱۹ دى ۱۳۹۲ ۰۲:۲۰ ق.ظ)H-Arshad نوشته شده توسط:  سلام
من برای بدست اوردن follow یک گرامر مشکل دارم،یعنی هر کدم که مخواهم بدست بیارم ، نیاز به داشتن Follow دیگری هست و انگار افتاده توی loop Huh
مثلا باید follow A رو بریمز توی follow B و بعد خود follow B برای بدست اوردنش باید follow c حساب کنم باز follow c نیاز به ...

سلام
از روی قوانین به راحتی میشه فالو رو حساب کرد.اگه با گرامری خاصی مشکل داری، بگو تا روش کار کنیم.

RE: حلقه در بدست آوردن Follow - H-Arshad - 19 دى ۱۳۹۲ ۰۳:۳۵ ق.ظ

(۱۹ دى ۱۳۹۲ ۰۳:۲۹ ق.ظ)aem4949 نوشته شده توسط:  
(19 دى ۱۳۹۲ ۰۲:۲۰ ق.ظ)H-Arshad نوشته شده توسط:  سلام
من برای بدست اوردن follow یک گرامر مشکل دارم،یعنی هر کدم که مخواهم بدست بیارم ، نیاز به داشتن Follow دیگری هست و انگار افتاده توی loop Huh
مثلا باید follow A رو بریمز توی follow B و بعد خود follow B برای بدست اوردنش باید follow c حساب کنم باز follow c نیاز به ...

سلام
از روی قوانین به راحتی میشه فالو رو حساب کرد.اگه با گرامری خاصی مشکل داری، بگو تا روش کار کنیم.
سلام
بفرمائید

S-> bD|AB
A-> aF|lambda
B-> dE|EF
F-> eb|iBS|lambda
E-> mA|n
D->AF|j

RE: Loop در بدست آوردن Follow - AEM4949 - 19 دى ۱۳۹۲ ۱۲:۳۷ ب.ظ

قوانین اینا هستند:
۱) علامت $ را به (Follow(s اضافه می کنیم(s نماد شروع).
۲)اگر قانون تولید به شکل p-->aXb وجود داشته باشد(a آلفا و b بتا) آنگاه (first(b را به (follow(x اضافه می کنیم.
۳)اگر قانون تولید به شکل p-->aX وجود داشته باشد آنگاه (follow(p را به (follow(x اضافه می کنیم.
۴) اگر قانون تولیدی به شکل p-->aXA و A در یک یا چند مرحله به اپسیلون (لامبدا) ختم شود آنگاه (Follow(p را به (follow(x اضافه می کنیم.

حالا این شما میگی انگار میره تو loop ، اگه یادت باشه تو برنامه نویسی هم برنامه بازگشتی داشتیم.
مثلا برای Follow(S) داریم:

$ + (Follow(F

یا برای (Follow(A داریم:

[tex]Follow(E) First(F) First(B) Follow(D)[/tex]

و به هم تربیت برای همه حساب می کنیم.

RE: Loop در بدست آوردن Follow - H-Arshad - 19 دى ۱۳۹۲ ۱۲:۵۰ ب.ظ

(۱۹ دى ۱۳۹۲ ۱۲:۳۷ ب.ظ)aem4949 نوشته شده توسط:  قوانین اینا هستند:
۱) علامت $ را به (Follow(s اضافه می کنیم(s نماد شروع).
۲)اگر قانون تولید به شکل p-->aXb وجود داشته باشد(a آلفا و b بتا) آنگاه (first(b را به (follow(x اضافه می کنیم.
۳)اگر قانون تولید به شکل p-->aX وجود داشته باشد آنگاه (follow(p را به (follow(x اضافه می کنیم.
۴) اگر قانون تولیدی به شکل p-->aXA و A در یک یا چند مرحله به اپسیلون (لامبدا) ختم شود آنگاه (Follow(p را به (follow(x اضافه می کنیم.

حالا این شما میگی انگار میره تو loop ، اگه یادت باشه تو برنامه نویسی هم برنامه بازگشتی داشتیم.
مثلا برای Follow(S) داریم:

$ + (Follow(F

یا برای (Follow(A داریم:

[tex]Follow(E) First(F) Follow(D)[/tex]

و به هم تربیت برای همه حساب می کنیم.
سلام
درسته من شاید ۲۰ بار تاحالا حساب کردم و درنهایت همه نیاز به follow دیگری پیدا میکنن،چطور از بازگشتی حسابش کرد؟
میشه یک نمونه مثال حل کنید ممنون میشم Heart
دربرنامه نویسی بازگشتی بلاخره ما یک شرط داشتیم که وقتی به اون برسیم . مساله از پایین به بالا میرفت برای حل شدن
الان این شرط اتمامی نیست داخلش

RE: Loop در بدست آوردن Follow - AEM4949 - 19 دى ۱۳۹۲ ۰۲:۵۷ ب.ظ

الان توی گرامری که خودت نوشتی با فالوی چه حرفی مشکل داری تا برات بازش کنم؟

RE: Loop در بدست آوردن Follow - H-Arshad - 19 دى ۱۳۹۲ ۰۳:۱۲ ب.ظ

(۱۹ دى ۱۳۹۲ ۰۲:۵۷ ب.ظ)aem4949 نوشته شده توسط:  الان توی گرامری که خودت نوشتی با فالوی چه حرفی مشکل داری تا برات بازش کنم؟

سلام
هیچ کدامش بدست نمیاد.وابسته بهم شدن
مثلا
Follow (A)

RE: Loop در بدست آوردن Follow - azad_ahmadi - 19 دى ۱۳۹۲ ۰۳:۴۱ ب.ظ

(۱۹ دى ۱۳۹۲ ۰۳:۱۲ ب.ظ)H-Arshad نوشته شده توسط:  
(19 دى ۱۳۹۲ ۰۲:۵۷ ب.ظ)aem4949 نوشته شده توسط:  الان توی گرامری که خودت نوشتی با فالوی چه حرفی مشکل داری تا برات بازش کنم؟

سلام
هیچ کدامش بدست نمیاد.وابسته بهم شدن
مثلا
Follow (A)

سلام.

فالوی A برابر هست با :
d . m . n . e . i . $ . b . a

تحلیلی روش داشته باشید، اگه سوالی داشتید بپرسید.

RE: Loop در بدست آوردن Follow - H-Arshad - 19 دى ۱۳۹۲ ۰۴:۱۰ ب.ظ

(۱۹ دى ۱۳۹۲ ۰۳:۴۱ ب.ظ)azad_ahmadi نوشته شده توسط:  
(19 دى ۱۳۹۲ ۰۳:۱۲ ب.ظ)H-Arshad نوشته شده توسط:  
(19 دى ۱۳۹۲ ۰۲:۵۷ ب.ظ)aem4949 نوشته شده توسط:  الان توی گرامری که خودت نوشتی با فالوی چه حرفی مشکل داری تا برات بازش کنم؟

سلام
هیچ کدامش بدست نمیاد.وابسته بهم شدن
مثلا
Follow (A)

سلام.

فالوی A برابر هست با :
d . m . n . e . i . $ . b . a

تحلیلی روش داشته باشید، اگه سوالی داشتید بپرسید.

بله صحیح هست پاسخ و من پاسخ همه فالو ها دارم اما نمیدانم چطور بدست میاد
فرمول میزارم اما وابسته به هم شده
اگر میشه برای نمونه فالوی A رو شرح بدید چطور بدست امده

RE: Loop در بدست آوردن Follow - azad_ahmadi - 19 دى ۱۳۹۲ ۰۴:۳۸ ب.ظ

صورت سوال به این شکل است:

S-> bD|AB
A-> aF|lambda
B-> dE|EF
F-> eb|iBS|lambda
E-> mA|n
D->AF|j

برای بدست اوردن فالوی A بصورت زیر عمل میکنیم:

حالت اول : [tex]S\rightarrow AB[/tex]


[tex]fallow(A) = first(B)[/tex]
[tex]first(B) = 'd' , first(E)[/tex]
[tex]first(E) = 'm' . 'n'[/tex]

پس تاکنون عناصر d,m,n عضو فالوی A هستن.

حالت دوم : [tex]E \rightarrow mA[/tex]

[tex]fallow(A) = fallow(E)[/tex]
[tex]fallow(E) = first(F)[/tex]
[tex]first(F) = 'e' . 'i'[/tex]
چون F لامبدا رو هم قبول میکنه پس قاعده زیر رو هم باید اجرا کنیم:
[tex]fallow(E) = fallow(B)[/tex]
[tex]fallow(B) = '@' , first(S)[/tex]
[tex]first(S) = 'b' . 'a'[/tex]

عناصر a , b , @ , e , i رو هم به عناصر قبلی یعنی n . m . d اضافه میکنیم.

حالت سوم : [tex]D\rightarrow AF[/tex]

[tex]fallow(A)=first(F)[/tex]
[tex]first(F) = 'e' . 'i'[/tex]
البته چون F میتونه لامبدا رو هم قبول کنه پس قانون زیر هم قابل اجراست:
[tex]fallow(A) = fallow(D)[/tex]
[tex]fallow(D) = '@'[/tex]

پس در کل با ۳ حالت تونستیم فالوی A رو بدست بیاریم که برابر هست با : i . e. b. a. d. m .n . @

RE: Loop در بدست آوردن Follow - H-Arshad - 19 دى ۱۳۹۲ ۰۵:۴۴ ب.ظ

(۱۹ دى ۱۳۹۲ ۰۴:۳۸ ب.ظ)azad_ahmadi نوشته شده توسط:  صورت سوال به این شکل است:

S-> bD|AB
A-> aF|lambda
B-> dE|EF
F-> eb|iBS|lambda
E-> mA|n
D->AF|j

برای بدست اوردن فالوی A بصورت زیر عمل میکنیم:

حالت اول : [tex]S\rightarrow AB[/tex]


[tex]fallow(A) = first(B)[/tex]
[tex]first(B) = 'd' , first(E)[/tex]
[tex]first(E) = 'm' . 'n'[/tex]

پس تاکنون عناصر d,m,n عضو فالوی A هستن.

حالت دوم : [tex]E \rightarrow mA[/tex]

[tex]fallow(A) = fallow(E)[/tex]
[tex]fallow(E) = first(F)[/tex]
[tex]first(F) = 'e' . 'i'[/tex]
چون F لامبدا رو هم قبول میکنه پس قاعده زیر رو هم باید اجرا کنیم:
[tex]fallow(E) = fallow(B)[/tex]
[tex]fallow(B) = '@' , first(S)[/tex]
[tex]first(S) = 'b' . 'a'[/tex]

عناصر a , b , @ , e , i رو هم به عناصر قبلی یعنی n . m . d اضافه میکنیم.

حالت سوم : [tex]D\rightarrow AF[/tex]

[tex]fallow(A)=first(F)[/tex]
[tex]first(F) = 'e' . 'i'[/tex]
البته چون F میتونه لامبدا رو هم قبول کنه پس قانون زیر هم قابل اجراست:
[tex]fallow(A) = fallow(D)[/tex]
[tex]fallow(D) = '@'[/tex]

پس در کل با ۳ حالت تونستیم فالوی A رو بدست بیاریم که برابر هست با : i . e. b. a. d. m .n . @

ممنون لطف کردید خیلی زحمت کشیدید
اما برای follow B شما این قسمت رو حساب نکردید
همان خط اول
S-->AB میره و FollowB مگر نمیشه FollowS اما حساب نکردیم

RE: Loop در بدست آوردن Follow - azad_ahmadi - 19 دى ۱۳۹۲ ۰۵:۵۲ ب.ظ

(۱۹ دى ۱۳۹۲ ۰۵:۴۴ ب.ظ)H-Arshad نوشته شده توسط:  
(19 دى ۱۳۹۲ ۰۴:۳۸ ب.ظ)azad_ahmadi نوشته شده توسط:  صورت سوال به این شکل است:

S-> bD|AB
A-> aF|lambda
B-> dE|EF
F-> eb|iBS|lambda
E-> mA|n
D->AF|j

برای بدست اوردن فالوی A بصورت زیر عمل میکنیم:

حالت اول : [tex]S\rightarrow AB[/tex]


[tex]fallow(A) = first(B)[/tex]
[tex]first(B) = 'd' , first(E)[/tex]
[tex]first(E) = 'm' . 'n'[/tex]

پس تاکنون عناصر d,m,n عضو فالوی A هستن.

حالت دوم : [tex]E \rightarrow mA[/tex]

[tex]fallow(A) = fallow(E)[/tex]
[tex]fallow(E) = first(F)[/tex]
[tex]first(F) = 'e' . 'i'[/tex]
چون F لامبدا رو هم قبول میکنه پس قاعده زیر رو هم باید اجرا کنیم:
[tex]fallow(E) = fallow(B)[/tex]
[tex]fallow(B) = '@' , first(S)[/tex]
[tex]first(S) = 'b' . 'a'[/tex]

عناصر a , b , @ , e , i رو هم به عناصر قبلی یعنی n . m . d اضافه میکنیم.

حالت سوم : [tex]D\rightarrow AF[/tex]

[tex]fallow(A)=first(F)[/tex]
[tex]first(F) = 'e' . 'i'[/tex]
البته چون F میتونه لامبدا رو هم قبول کنه پس قانون زیر هم قابل اجراست:
[tex]fallow(A) = fallow(D)[/tex]
[tex]fallow(D) = '@'[/tex]

پس در کل با ۳ حالت تونستیم فالوی A رو بدست بیاریم که برابر هست با : i . e. b. a. d. m .n . @

ممنون لطف کردید خیلی زحمت کشیدید
اما برای follow B شما این قسمت رو حساب نکردید
همان خط اول
S-->AB میره و FollowB مگر نمیشه FollowS اما حساب نکردیم

بله درست میفرمایید. یکی دوتا محاسبه Fallow رو کم گذاشتم.
محاسبات رو تا جایی که در سیکل نیوفته انجام میدیم. میدونیم که با انجام دوباره ش همون عملیات قبلی تکرار میشه.

RE: Loop در بدست آوردن Follow - H-Arshad - 19 دى ۱۳۹۲ ۰۵:۵۶ ب.ظ

(۱۹ دى ۱۳۹۲ ۰۵:۵۲ ب.ظ)azad_ahmadi نوشته شده توسط:  
(19 دى ۱۳۹۲ ۰۵:۴۴ ب.ظ)H-Arshad نوشته شده توسط:  
(19 دى ۱۳۹۲ ۰۴:۳۸ ب.ظ)azad_ahmadi نوشته شده توسط:  صورت سوال به این شکل است:

S-> bD|AB
A-> aF|lambda
B-> dE|EF
F-> eb|iBS|lambda
E-> mA|n
D->AF|j

برای بدست اوردن فالوی A بصورت زیر عمل میکنیم:

حالت اول : [tex]S\rightarrow AB[/tex]


[tex]fallow(A) = first(B)[/tex]
[tex]first(B) = 'd' , first(E)[/tex]
[tex]first(E) = 'm' . 'n'[/tex]

پس تاکنون عناصر d,m,n عضو فالوی A هستن.

حالت دوم : [tex]E \rightarrow mA[/tex]

[tex]fallow(A) = fallow(E)[/tex]
[tex]fallow(E) = first(F)[/tex]
[tex]first(F) = 'e' . 'i'[/tex]
چون F لامبدا رو هم قبول میکنه پس قاعده زیر رو هم باید اجرا کنیم:
[tex]fallow(E) = fallow(B)[/tex]
[tex]fallow(B) = '@' , first(S)[/tex]
[tex]first(S) = 'b' . 'a'[/tex]

عناصر a , b , @ , e , i رو هم به عناصر قبلی یعنی n . m . d اضافه میکنیم.

حالت سوم : [tex]D\rightarrow AF[/tex]

[tex]fallow(A)=first(F)[/tex]
[tex]first(F) = 'e' . 'i'[/tex]
البته چون F میتونه لامبدا رو هم قبول کنه پس قانون زیر هم قابل اجراست:
[tex]fallow(A) = fallow(D)[/tex]
[tex]fallow(D) = '@'[/tex]

پس در کل با ۳ حالت تونستیم فالوی A رو بدست بیاریم که برابر هست با : i . e. b. a. d. m .n . @

ممنون لطف کردید خیلی زحمت کشیدید
اما برای follow B شما این قسمت رو حساب نکردید
همان خط اول
S-->AB میره و FollowB مگر نمیشه FollowS اما حساب نکردیم

بله درست میفرمایید. یکی دوتا محاسبه Fallow رو کم گذاشتم.
محاسبات رو تا جایی که در سیکل نیوفته انجام میدیم. میدونیم که با انجام دوباره ش همون عملیات قبلی تکرار میشه.

خوب،این طبیعی هست در گرامر ها؟
جقدر بفهمیم باید بفهمیم باید ادامه بدیم؟

RE: Loop در بدست آوردن Follow - azad_ahmadi - 19 دى ۱۳۹۲ ۰۶:۲۶ ب.ظ

(۱۹ دى ۱۳۹۲ ۰۵:۵۶ ب.ظ)H-Arshad نوشته شده توسط:  
(19 دى ۱۳۹۲ ۰۵:۵۲ ب.ظ)azad_ahmadi نوشته شده توسط:  
(19 دى ۱۳۹۲ ۰۵:۴۴ ب.ظ)H-Arshad نوشته شده توسط:  
(19 دى ۱۳۹۲ ۰۴:۳۸ ب.ظ)azad_ahmadi نوشته شده توسط:  صورت سوال به این شکل است:

S-> bD|AB
A-> aF|lambda
B-> dE|EF
F-> eb|iBS|lambda
E-> mA|n
D->AF|j

برای بدست اوردن فالوی A بصورت زیر عمل میکنیم:

حالت اول : [tex]S\rightarrow AB[/tex]


[tex]fallow(A) = first(B)[/tex]
[tex]first(B) = 'd' , first(E)[/tex]
[tex]first(E) = 'm' . 'n'[/tex]

پس تاکنون عناصر d,m,n عضو فالوی A هستن.

حالت دوم : [tex]E \rightarrow mA[/tex]

[tex]fallow(A) = fallow(E)[/tex]
[tex]fallow(E) = first(F)[/tex]
[tex]first(F) = 'e' . 'i'[/tex]
چون F لامبدا رو هم قبول میکنه پس قاعده زیر رو هم باید اجرا کنیم:
[tex]fallow(E) = fallow(B)[/tex]
[tex]fallow(B) = '@' , first(S)[/tex]
[tex]first(S) = 'b' . 'a'[/tex]

عناصر a , b , @ , e , i رو هم به عناصر قبلی یعنی n . m . d اضافه میکنیم.

حالت سوم : [tex]D\rightarrow AF[/tex]

[tex]fallow(A)=first(F)[/tex]
[tex]first(F) = 'e' . 'i'[/tex]
البته چون F میتونه لامبدا رو هم قبول کنه پس قانون زیر هم قابل اجراست:
[tex]fallow(A) = fallow(D)[/tex]
[tex]fallow(D) = '@'[/tex]

پس در کل با ۳ حالت تونستیم فالوی A رو بدست بیاریم که برابر هست با : i . e. b. a. d. m .n . @

ممنون لطف کردید خیلی زحمت کشیدید
اما برای follow B شما این قسمت رو حساب نکردید
همان خط اول
S-->AB میره و FollowB مگر نمیشه FollowS اما حساب نکردیم

بله درست میفرمایید. یکی دوتا محاسبه Fallow رو کم گذاشتم.
محاسبات رو تا جایی که در سیکل نیوفته انجام میدیم. میدونیم که با انجام دوباره ش همون عملیات قبلی تکرار میشه.

خوب،این طبیعی هست در گرامر ها؟
جقدر بفهمیم باید بفهمیم باید ادامه بدیم؟

خیر این طبیعی نیست. در عمل باید چرخه هایی که در گرامر هستند رو از بین ببریم.(البته این گرامر ظاهرا همه به هم وابسته هستن).
اما برای سوالات کنکور که صرفا محاسبه فالوی یک غیرترمینال رو میخواند باید تا جایی که به چرخه میرسیم ادامه بدیم.

RE: Loop در بدست آوردن Follow - hadi1989 - 13 بهمن ۱۳۹۲ ۱۲:۱۶ ق.ظ

سلام
من اینو بدست آوردم امیدوارم درست باشه و در این زمان کم باقی مانده بدردتون بخوره:

[tex]fallow(A): d,m,n, follow(E) ,e,i, follow(D) ;[/tex]

[tex]fallow(E): follow(B) ,e,i;[/tex]

[tex]fallow(B): follow(S) ,b,a,d,m,n;[/tex]

[tex]fallow(D): follow(S) ;[/tex]

[tex]fallow(S): s (dollar);[/tex]

خب اگه جای فالوها مقادیرشون قرار بدید به نتیجه زیر خواهید رسید:

[tex]fallow(A): d,m,n,s,a,b,e,i;[/tex]