تالار گفتمان مانشت
سئوال از (CLR(1 - نسخه‌ی قابل چاپ

سئوال از (CLR(1 - iCanDoIt - 18 دى ۱۳۹۴ ۱۱:۵۴ ق.ظ

سلام و درود.Cool
HeartHeart

توی کتاب کامپایلر آل شیخ پوران صفحه ۱۲۱ مثالی رو حل کرده من یه جاش ایراد دارم
اگه تصویر باز نشد
مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمی‌باشید. جهت مشاهده پیوندها ثبت نام کنید.
کلیک کنید.SmileTongue

[تصویر:  394309_pv7ctnlhg7pcctrfdgo9.jpg]

مگه توی قسمت پیشگویی هایی که می کنیم نباید follow A و follow B رو بنویسیم ولی نمی دونم چرا اینجا اومده فقط یکیشون رو نوشته.

بعد یه مسلئه ی دیگه ای که هست اینه که چرا توی first S و 'first S عبارت لاندار رو ننوشته!!!!Huh

با تشکرHeartBig Grin

RE: سئوال از (CLR(1 - Iranian Wizard - 23 خرداد ۱۳۹۵ ۰۸:۱۲ ب.ظ

(۱۸ دى ۱۳۹۴ ۱۱:۵۴ ق.ظ)iCanDoIt نوشته شده توسط:  
[تصویر:  394309_pv7ctnlhg7pcctrfdgo9.jpg]

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


(۱۸ دى ۱۳۹۴ ۱۱:۵۴ ق.ظ)iCanDoIt نوشته شده توسط:  چرا توی first S و 'first S عبارت لاندار رو ننوشته!!!!Huh
گرامر مورد نظر این هستش:

[tex]S'\: \longrightarrow\: S[/tex]

[tex]S\: \longrightarrow\: AaAb\: |\: BbBa[/tex]

[tex]A\: \longrightarrow\: \lambda[/tex]

[tex]B\: \longrightarrow\: \lambda[/tex]



محاسبه‌ی [tex]first(S')[/tex] و [tex]first(S)[/tex] :

[tex]first(S') =\: first(S)\: =\: first(AaAb)\: \cup\: first(BbBa)[/tex]

حال چون [tex]A\: \longrightarrow\: \lambda[/tex] ، پس [tex]first(AaAb)\: =\: first(aAb) = \{a\}[/tex]

و چون [tex]B\: \longrightarrow\: \lambda[/tex] ، پس [tex]first(BbBa)\: =\: first(bBa)\: =\: \{b\}[/tex]

در نتیجه
[tex]first(S') = first(S)\: =first(AaAb)\: \cup\: first(BbBa)\: = \{a\}\: \cup\: \{b\}\: = \{a\: , b\}[/tex]


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


(۱۸ دى ۱۳۹۴ ۱۱:۵۴ ق.ظ)iCanDoIt نوشته شده توسط:  مگه توی قسمت پیشگویی هایی که می کنیم نباید follow A و follow B رو بنویسیم ولی نمی دونم چرا اینجا اومده فقط یکیشون رو نوشته.
اگه علامت نقطه قبل از یک متغیر (A) بیاد(مثلا بصورت [tex]X\: \longrightarrow\: a.AB\: ,\: \{\gamma\}[/tex] )،آنگاه بایستی اون متغیر(A) رو گسترش بدیم و مجموعه پیش‌گویی آن برابر [tex]first(B\gamma)[/tex] خواهد بود.

در این سوال هم در [tex]S\: \longrightarrow\: .\: AaAb\: ,\: \{\: \$\: \}[/tex] ، چونکه نقطه قبل از متغیر A اومده،پس باید متغیر A رو گسترش بدیم و مجموعه پیش‌گویی آن برابر [tex]first(aAb\$)[/tex] یعنی [tex]\{a\}[/tex] خواهد شد.
پس عبارت [tex]A\: \longrightarrow\: .\: , \{a\}[/tex] اضافه خواهد شد.

از طرفی در [tex]S\: \longrightarrow\: .BbBa\: , \{\$\: \}[/tex] ، چونکه نقطه قبل از متغیر B اومده،پس باید متغیر B رو گسترش بدیم و مجموعه پیش‌گویی آن برابر [tex]first(bBa\$)[/tex] یعنی [tex]\{b\}[/tex] خواهد شد.
پس عبارت [tex]B\: \longrightarrow\: .\: , \{b\}[/tex] اضافه خواهد شد.

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