تالار گفتمان مانشت
محاسبه First ها - نسخه‌ی قابل چاپ

محاسبه First ها - اوبالیت به بو - ۲۴ خرداد ۱۳۹۱ ۰۷:۲۷ ب.ظ

درود بر کاربران سایت

فرض کنید چنین گرامری داریم:

کد:
A->d|Landa
و می خواهیم First A را حساب کنیم. من می دانم که جواب در مرحله اول می شود d. اما نسب به یک مساله شک دارم و می خواهم قدم به قدم First را محاسبه کنم:
۱- می گوییم First می شود علامت غیر نهایی که در اینجا d است.
۲- حال می گوییم چون لاندا وجود دارد یعنی A->Landa پس یعنی A می رود به تهی بنابراین First A می شود d و تهی که می شود d.
آیا این درست است؟

چون می گوییم لاندا داریم و لاندا سبب حذف اولین قاعده می شود و چون در اینجا فقط d وجود دارد d حذف می شود و می شود تهی. آیا این استنتاج صحیح است؟

RE: محاسبه First ها - naderx - 24 خرداد ۱۳۹۱ ۰۸:۰۸ ب.ظ

سلام دوست عزیز این دو تا عکس رو نگاه نکن و اگه مشکلی داشتی بگو تا توضیح بدم ولی اگر بخواهم مختصر بگم :
۱- first یعنی ببینم که رشته های تولید شده از اون متغییر خاصی که ما میخواهیم first آن را حساب کنیم با چه کاراکتری شروع میشوند
تا اینجا اوکی ؟ شما به اشتباه نوشتین غیر نهایی ، d نهایی هست نه غیر نهایی
نهایی : متغییر های کوچک هستند مثل a b d
و غیر نهایی : متغییرهای بزرگ هستند مثل A B C
۲- چون A به d و تهی رود پس هم تهی و هم d جزو مجموعه first(A) هست.
" و تهی میشود d " یعنی چی ؟ هم تهی و هم d

۳- چرا وقتی تهی داریم d حذف میشود ؟ معنی حرف شما رو نمیفهمم !!! و چون نمیفهمم خط آخر شما رو نمیتونم بگم استلال شما درست است یا غلط

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

محاسبه First ها - مازیار صفایی - ۲۴ خرداد ۱۳۹۱ ۰۸:۱۲ ب.ظ

نه.... هم d و هم لاندا هر دو جز First ها محسوب می شوند

RE: محاسبه First ها - اوبالیت به بو - ۲۵ خرداد ۱۳۹۱ ۱۰:۳۲ ق.ظ

(۲۴ خرداد ۱۳۹۱ ۰۸:۰۸ ب.ظ)naderx نوشته شده توسط:  تا اینجا اوکی ؟ شما به اشتباه نوشتین غیر نهایی ، d نهایی هست نه غیر نهایی
نهایی : متغییر های کوچک هستند مثل a b d
و غیر نهایی : متغییرهای بزرگ هستند مثل A B C

اوه بله. درست می فرماییید، بدلیل سریع تایپ کردن اشتباه نوشتم. d و در کل متغیرهای کوچک نهایی هستند.
(۲۴ خرداد ۱۳۹۱ ۰۸:۰۸ ب.ظ)naderx نوشته شده توسط:  ۲- چون A به d و تهی رود پس هم تهی و هم d جزو مجموعه first(A) هست.
" و تهی میشود d " یعنی چی ؟ هم تهی و هم d
ما وقتی که لاندار را در قاعده خودمان داریم، در محاسبه میایم لاندا را جایگزین متغیر اول عبارت می کنیم. یعنی فرض می کنیم آن متغیر اول وجود ندارد. مثلا A->Bc|Landa را می توان گفت A->c زیرا لاندار جایگزین B می شود. حال در این رشته بالا ما فقط یک متغیر داریم و ان هم نهایی است. حالا می توان گفت First A می شود d + اینکه لاندا جایگزین d شود و چون چیزی باقی نمی ماند می گوییم تهی. آیا این صحبت درست است؟

الان جناب naderx به تصویر دوم دقت کنید. تصویری که یک مثال را ارائه کرده است. من برای محاسبه First E,T,F بدون اشتباه حل کردم و پاسخم مشابه مثال بود اما در First E',T'x اشتباه کردم. این مراحل رو انجام دادم:

First E'={+} + {(,id} زیرا + که مشخص است. حال می ماند لاندا. چون لاندا داریم پس رشته E'->+TF'|Landa می شود E'->TF' یعنی + حذف می شود و باید First T حساب شود که می شود ( و id. مشکل من اینجاست که نمی توانم تشخیص دهم وقتی لاندا میآید کی باید علامت رشته را حذف کنم. اگر نهایی باشد چه کنم؟ اگر غیرنهایی باشد چه کنم؟

RE: محاسبه First ها - naderx - 25 خرداد ۱۳۹۱ ۱۱:۳۸ ق.ظ

شما بکلی اشتباه فکر میکنید !
من قضیه رو ساده با مثال توضیح میدم : (خواهشن فقط به مثال من توجه کنید و بیخیال همه چیزهایی که گفتم بشین، حواس ها همه اینجا)

ما یه گرامر داریم مثل این :
T ---> AB
A ---> a | bA | landa
B --- > c | + f

یه بنده خدایی میاد و از ما میپرسه :
(first(T چی میشه ؟ ما جواب میدم : میشود (first(A ! چون با A شروع شده و چون (first(A میشود a , b پس (first(T هم میشود a ,b
بعد طرف میپرسه تمام ؟ ما میگیم نه ! چون A میتونه نابود بشه (چون به سمت لاندا میرود) جمله : T ---> AB تبدیل میشود به جمله
T ---> B و باید (first(B رو هم به مجموعه (first(T اضافه کرد. که در نهایت (first(T میشود : a , b,c,+
تا اینجا اوکی ؟ حالا فرض کن B هم به سمت لاندا میرفت اونوقت B هم میتونست نابود شود و T میرود یک راست به لاندا !!! آنوقت بود که میگفتیم لاندا رو هم به مجموعه (first(T اضافه کنید.
[/align]

محاسبه First ها - اوبالیت به بو - ۲۵ خرداد ۱۳۹۱ ۰۱:۰۵ ب.ظ

عالی بود. متوجه شدم.

پس اگر B هم می رفت به لاندا آنگاه First T می شود: a,b,c,+,Landa

خیلی سپاسگذارم. ممنون

RE: محاسبه First ها - naderx - 25 خرداد ۱۳۹۱ ۰۱:۲۹ ب.ظ

(۲۵ خرداد ۱۳۹۱ ۰۱:۰۵ ب.ظ)اوبالیت به بو نوشته شده توسط:  عالی بود. متوجه شدم.

پس اگر B هم می رفت به لاندا آنگاه First T می شود: a,b,c,+,Landa

خیلی سپاسگذارم. ممنون
سلام،خواهش میکنم ، بله دقیقا

RE: محاسبه First ها - soomo - 18 مهر ۱۳۹۲ ۰۷:۰۴ ب.ظ

[undefined=undefined] سلام من اصلا مفهو م first و fallow رو یاد نمیگیرم اگه میشه یکی خیلی خوب اینارو یاد ما بده شرمنده هم LL1 , LR 1[/undefined]

RE: محاسبه First ها - soomo - 21 مهر ۱۳۹۲ ۱۲:۵۲ ب.ظ

یکی این مفهوم FALLOW رو به ما یاد بده یک هفته هر چی میخونم یادش نمیگیرم

خواهش میکنم ....Tongue