سلام و درود.
توی کتاب کامپایلر آل شیخ پوران صفحه 121 مثالی رو حل کرده من یه جاش ایراد دارم
اگه تصویر باز نشد
مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمیباشید. جهت مشاهده پیوندها ثبت نام کنید.
کلیک کنید.
مگه توی قسمت پیشگویی هایی که می کنیم نباید follow A و follow B رو بنویسیم ولی نمی دونم چرا اینجا اومده فقط یکیشون رو نوشته.
بعد یه مسلئه ی دیگه ای که هست اینه که چرا توی first S و 'first S عبارت لاندار رو ننوشته!!!!
با تشکر
(18 دى 1394 11:54 ق.ظ)iCanDoIt نوشته شده توسط: [ -> ]
-------------------------------------------------------------------------------
(18 دى 1394 11:54 ق.ظ)iCanDoIt نوشته شده توسط: [ -> ]چرا توی first S و 'first S عبارت لاندار رو ننوشته!!!!
گرامر مورد نظر این هستش:
[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) .