۰
subtitle
ارسال: #۱
  
رابطه ی بین وجود تداخل در یک گرامر و مبهم بودن آن گرامر
سلام دوستان
آیا ممکنه گرامری هنگام رسم ماشین خودکار متناهی، با استفاده از آیتم های (۱)LR، هیچ نوع تداخلی نداشته باشه (که طبق تعریف چنین گرامری (۱)LR نامیده میشه) اما از طرفی مبهم هم باشه؟
تا به امروز من فکر می کردم پاسخ این سئوال "خیر" هست تا اینکه امروز به این گرامر برخورد کردم:
این گرامر همون طور که در تصویر دیده میشه، از طرفی هیچ نوع تداخلی نداره و از طرفی کاملا واضح هست که مبهمه. آیا این موضوع، به این معناست که عدم وجود تداخل (برخورد) در یک گرامر، شرطی لازم و نه کافی برای (۱)LR بودن اون گرامر هست؟ کسی از دوستان میتونه در این خصوص من رو راهنمایی کنه؟
آیا ممکنه گرامری هنگام رسم ماشین خودکار متناهی، با استفاده از آیتم های (۱)LR، هیچ نوع تداخلی نداشته باشه (که طبق تعریف چنین گرامری (۱)LR نامیده میشه) اما از طرفی مبهم هم باشه؟
تا به امروز من فکر می کردم پاسخ این سئوال "خیر" هست تا اینکه امروز به این گرامر برخورد کردم:
A ---> A+A
A ---> a
A ---> a
این گرامر همون طور که در تصویر دیده میشه، از طرفی هیچ نوع تداخلی نداره و از طرفی کاملا واضح هست که مبهمه. آیا این موضوع، به این معناست که عدم وجود تداخل (برخورد) در یک گرامر، شرطی لازم و نه کافی برای (۱)LR بودن اون گرامر هست؟ کسی از دوستان میتونه در این خصوص من رو راهنمایی کنه؟
۰
ارسال: #۲
  
RE: رابطه ی بین تداخل های یک گرامر و مبهم بودن آن گرامر
بحثی که توی این تاپیک شد منو خیلی بیشتر راغب کرد که بشینم و خیلی عمیق تر به این مسئله فکر کنم و خوشبختانه تونستم مچ این آل شیخ تعطیل رو بگیرم
همون طوری که توی این عکسم که دوستمون گذاشتن توی حالت I0 داریم که
حالا از این جا به بعد میبینیم که آقای آل شیخ اومده به صورت معمول ماشین رو برده به حالت های بعدیش و بدون مشکل هم تمومش کرده و جدول رو هم بدون تداخل میتونیم بکشیم.
ولی دریغ از این که فک نکرده که آقا ماشین باید توی همین حالت اول I0 کلاسوری [tex]A\rightarrow .A A{$}[/tex] رو دوباره بستش بده یعنی ما باید این عبارت رو دوباره توی حالت I0 به صورت بازگشتی بستش بدیم :
واسه راحتی کار هم میتونیم حالت I0 رو به صورت زیر هم خلاصه کنیم
حالا اگه ماشین رو به این صورت پیش ببریم فک کنم توی مرحله ی ششم هست که تداخل انتقال/کاهش رخ میده چون اینجا یه کم سخته کشیدن ماشین خودکار خودتون دیگه ماشینش رو بکشین و در نتیجه چون این گرامر مبهم هست پس LR هم نیست و جواب تست هم میشه همون گرامر گزینه ج که مبهم نیست و LR هم هست.
نتیجه : آقای آل شیخ، بنده ی خدا ندونسته که چطور دانشجو رو بپیچونه هر جوری که تونسته ماشین رو پیش برده حتی به قیمت زیر پا گذاشتن قضیه اساسی توی کامپایلر. واسه همین هست که اگه کسایی که تستاش رو حل کردن توی تستای تالیفی بعضی جاها در کمال تعجب خواننده مجموعه Look Ahead رو یه چیزی نوشته که به عقلم جور در نمیاد و خیلی ها فک میکنن که تستا رو اشتباه حل کرده و معروفم شده کتابش که خیلی اشتباه داره، ولی دریغ از این که باید از این قاعده بازگشتی استفاده کرد تا به اون مجموعه Look Ahead برسیم و دانشجو رو هم گمراه نکرد!!!
هر گرامری که هنگام رسم ماشین خودکار متناهی با استفاده از آیتم های (۱)LR تداخل به وجود نیاید ، قطعا (۱)LR هست.
هر گرامری که مبهم باشد، قطعا (۱)LR نخواهد بود.
موفق باشید.
همون طوری که توی این عکسم که دوستمون گذاشتن توی حالت I0 داریم که
[tex]S\rightarrow .A,\left \{\$ \right \}[/tex]
[tex]A\rightarrow .A A,\left \{\$ \right \}[/tex]
[tex]A\rightarrow .a,\left \{\$ \right \}[/tex]
[tex]A\rightarrow .A A,\left \{\$ \right \}[/tex]
[tex]A\rightarrow .a,\left \{\$ \right \}[/tex]
حالا از این جا به بعد میبینیم که آقای آل شیخ اومده به صورت معمول ماشین رو برده به حالت های بعدیش و بدون مشکل هم تمومش کرده و جدول رو هم بدون تداخل میتونیم بکشیم.
ولی دریغ از این که فک نکرده که آقا ماشین باید توی همین حالت اول I0 کلاسوری [tex]A\rightarrow .A A{$}[/tex] رو دوباره بستش بده یعنی ما باید این عبارت رو دوباره توی حالت I0 به صورت بازگشتی بستش بدیم :
[tex]S\rightarrow .A,\left \{\$ \right \}[/tex]
[tex]A\rightarrow .A A,\left \{\$ \right \}[/tex]
[tex]A\rightarrow .a,\left \{\$ \right \}[/tex]
[tex]A\rightarrow .A A,\left \{ \right \}[/tex]
[tex]A\rightarrow .a,\left \{ \right \}[/tex]
[tex]A\rightarrow .A A,\left \{\$ \right \}[/tex]
[tex]A\rightarrow .a,\left \{\$ \right \}[/tex]
[tex]A\rightarrow .A A,\left \{ \right \}[/tex]
[tex]A\rightarrow .a,\left \{ \right \}[/tex]
واسه راحتی کار هم میتونیم حالت I0 رو به صورت زیر هم خلاصه کنیم
[tex]S\rightarrow .A,\left \{\$ \right \}[/tex]
[tex]A\rightarrow .A A,\left \{\$ \right \}[/tex]
[tex]A\rightarrow .A A,\left \{ \right \}[/tex]
[tex]A\rightarrow .a , \left \{ ,\$ \right \}[/tex]
[tex]A\rightarrow .A A,\left \{\$ \right \}[/tex]
[tex]A\rightarrow .A A,\left \{ \right \}[/tex]
[tex]A\rightarrow .a , \left \{ ,\$ \right \}[/tex]
حالا اگه ماشین رو به این صورت پیش ببریم فک کنم توی مرحله ی ششم هست که تداخل انتقال/کاهش رخ میده چون اینجا یه کم سخته کشیدن ماشین خودکار خودتون دیگه ماشینش رو بکشین و در نتیجه چون این گرامر مبهم هست پس LR هم نیست و جواب تست هم میشه همون گرامر گزینه ج که مبهم نیست و LR هم هست.
نتیجه : آقای آل شیخ، بنده ی خدا ندونسته که چطور دانشجو رو بپیچونه هر جوری که تونسته ماشین رو پیش برده حتی به قیمت زیر پا گذاشتن قضیه اساسی توی کامپایلر. واسه همین هست که اگه کسایی که تستاش رو حل کردن توی تستای تالیفی بعضی جاها در کمال تعجب خواننده مجموعه Look Ahead رو یه چیزی نوشته که به عقلم جور در نمیاد و خیلی ها فک میکنن که تستا رو اشتباه حل کرده و معروفم شده کتابش که خیلی اشتباه داره، ولی دریغ از این که باید از این قاعده بازگشتی استفاده کرد تا به اون مجموعه Look Ahead برسیم و دانشجو رو هم گمراه نکرد!!!
هر گرامری که هنگام رسم ماشین خودکار متناهی با استفاده از آیتم های (۱)LR تداخل به وجود نیاید ، قطعا (۱)LR هست.
هر گرامری که مبهم باشد، قطعا (۱)LR نخواهد بود.
موفق باشید.
۰
ارسال: #۳
  
رابطه ی بین تداخل های یک گرامر و مبهم بودن آن گرامر
(۱۹ آذر ۱۳۹۱ ۰۷:۵۸ ب.ظ)mp1368 نوشته شده توسط: بحثی که توی این تاپیک شد منو خیلی بیشتر راغب کرد که بشینم و خیلی عمیق تر به این مسئله فکر کنم و خوشبختانه تونستم مچ این آل شیخ تعطیل رو بگیرم
همون طوری که توی این عکسم که دوستمون گذاشتن توی حالت I0 داریم که
[tex]S\rightarrow .A,\left \{\$ \right \}[/tex]
[tex]A\rightarrow .A A,\left \{\$ \right \}[/tex]
[tex]A\rightarrow .a,\left \{\$ \right \}[/tex]
...
خیلی ممنون دوست گرامی که این قدر وقت گذاشتید و توضیح دادید. خوشبختانه با توجه به نکاتی که بیان کردید، متوجه مشکل شدم و پاسخم رو گرفتم. این گرامر مبهم، بر خلاف تصورم، دارای تداخل بود که من با توجه به ماشین رسم شده در کتاب، اصلا فکرش رو هم نمی کردم. نتیجه اینکه همون طور که شما هم گفیتد هر دو جمله ای که در پست قبل گفتم، صحیح بود و مشکل از نحوه ی رسم ماشین خودکار متناهی بود. باز هم بسیار سپاس گذارم از شما.
(۱۹ آذر ۱۳۹۱ ۰۸:۱۶ ب.ظ)هاتف نوشته شده توسط: شما که آخرش همونی رو گفتی که من اولش گفتم:
(۱۹ آذر ۱۳۹۱ ۰۷:۵۸ ب.ظ)mp1368 نوشته شده توسط: حالا اگه ماشین رو به این صورت پیش ببریم فک کنم توی مرحله ی ششم هست که تداخل انتقال/کاهش رخ میده
دوست عزیز، حق با شما بود که گفته بودید این گرامر تداخل داره. از شما هم، بسیار ممنونم.
فقط امیدوارم این تاپیک، باعث دلخوری دوستان از همدیگه نشه. ما به این خاطر این جا هستیم تا به هم کمک کنیم و نه چیز دیگه. در ضمن، یه نصیحت برادرانه هم اینکه موقع پست گذاشتن، کمی بیشتر آرامش خودمون رو حفظ کنیم تا بحث به صورت منطقی تری پیش بره. (اول از همه هم روی صحبت با خودم هست، بعد سایر عزیزان)
در ضمن، شاید اول از همه تقصیر من بود که تنبلی کردم و تصویر ماشین رسم شده در کتاب رو این جا نذاشته بودم. در هر صورت از این بابت، از دوستان عذر می خوام.
-۲
ارسال: #۴
  
رابطه ی بین تداخل های یک گرامر و مبهم بودن آن گرامر
سلام
این گرامر تداخل از نوع S/R داره
اگر دیاگرام SLR(1) اش رو رسم کنید به state یی به این شکل می رسید:
A--> A+A. (نقطه به انتها رسیده)
A-->A.+A (نقطه قبل از + قرار گرفته)
از طرفی می دانیم که "+" عضو follow(A) هست، حالا توی این حالت اگر + بیاد، تکلیف چیه؟ عمل کاهش چون نقطه به انتها رسیده، یا شیفت چون نقطه قبل از + اومده؟ پس اینجا ما تداخل داریم و می دانیم که اگر بخواهیم LALR(1) اش رو هم رسم کنیم جای شیفت ها عوض نمی شه و این تداخل سر جای خودش هست، اگر CLR(1) هم رسم کنیم این تداخل باقی خواهد موند چون اگر گرامری مبهم باشه به ازای هیچ k یی LR(k) نیست
اما
گفتید ماشین خودکار متنهاهی؟ منظورتون FSA بود؟ می دونید که ما در سطح پارسر ها از زبان های مستقل از متن استفاده می کنیم و ماشین زبانهای مستقل از متن PDA هست نه FSA، چون گفتید رسم ماشین شاید منظورتون رسم جدول یا دیاگرام بوده.
اگر گرامری مبهم باشه و ما براش جدول بکشیم حتما توش تداخل خواهیم داشت، پس این جملتون غلطه که گرامر بالا هم مبهمه هم توی جدول اش تداخل نداره!
اما
اما ما میتونیم برای یک گرامر مبهم پارسر LR(1) بسازیم، یعنی بعد از اینکه دیاگرام اش رو کشیدیم، خودمون با توجه به درکی که از Semantic برنامه داریم تداخل ها رو دستی برطرف کنیم، البته باز نمیشه گفت هر گرامر مبهمی رو می تونیم تداخل هاش رو برطرف کنیم، بعضــی از گرامر های مبهم رو ممکنه بتونیم براشون یک دیاگرام SLR(1) یا LALAR(1) یا CLR(1) بکشیم و دستی تداخل هاش رو برطرف کنیم و از روی اون پارسر LR(1) بسازیم.
این گرامر تداخل از نوع S/R داره
اگر دیاگرام SLR(1) اش رو رسم کنید به state یی به این شکل می رسید:
A--> A+A. (نقطه به انتها رسیده)
A-->A.+A (نقطه قبل از + قرار گرفته)
از طرفی می دانیم که "+" عضو follow(A) هست، حالا توی این حالت اگر + بیاد، تکلیف چیه؟ عمل کاهش چون نقطه به انتها رسیده، یا شیفت چون نقطه قبل از + اومده؟ پس اینجا ما تداخل داریم و می دانیم که اگر بخواهیم LALR(1) اش رو هم رسم کنیم جای شیفت ها عوض نمی شه و این تداخل سر جای خودش هست، اگر CLR(1) هم رسم کنیم این تداخل باقی خواهد موند چون اگر گرامری مبهم باشه به ازای هیچ k یی LR(k) نیست
اما
گفتید ماشین خودکار متنهاهی؟ منظورتون FSA بود؟ می دونید که ما در سطح پارسر ها از زبان های مستقل از متن استفاده می کنیم و ماشین زبانهای مستقل از متن PDA هست نه FSA، چون گفتید رسم ماشین شاید منظورتون رسم جدول یا دیاگرام بوده.
اگر گرامری مبهم باشه و ما براش جدول بکشیم حتما توش تداخل خواهیم داشت، پس این جملتون غلطه که گرامر بالا هم مبهمه هم توی جدول اش تداخل نداره!
اما
اما ما میتونیم برای یک گرامر مبهم پارسر LR(1) بسازیم، یعنی بعد از اینکه دیاگرام اش رو کشیدیم، خودمون با توجه به درکی که از Semantic برنامه داریم تداخل ها رو دستی برطرف کنیم، البته باز نمیشه گفت هر گرامر مبهمی رو می تونیم تداخل هاش رو برطرف کنیم، بعضــی از گرامر های مبهم رو ممکنه بتونیم براشون یک دیاگرام SLR(1) یا LALAR(1) یا CLR(1) بکشیم و دستی تداخل هاش رو برطرف کنیم و از روی اون پارسر LR(1) بسازیم.
Can I see some ID?
Feeling left out?
نگران نباش، فقط روی این لینک برای ثبت نام کلیک کن. رمزت رو فراموش کردی؟ اینجا به یادت میاریم! close