تالار گفتمان مانشت

نسخه‌ی کامل: سئوال از (CLR(1
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام و درود.Cool
HeartHeart

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

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

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

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

با تشکرHeartBig Grin
(18 دى 1394 11:54 ق.ظ)iCanDoIt نوشته شده توسط: [ -> ]
[تصویر:  394309_pv7ctnlhg7pcctrfdgo9.jpg]

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


(18 دى 1394 11:54 ق.ظ)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]


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


(18 دى 1394 11:54 ق.ظ)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) .
لینک مرجع