تالار گفتمان مانشت
lookahead در پارسر LR 1 - نسخه‌ی قابل چاپ

lookahead در پارسر LR 1 - kilookiloo - 31 فروردین ۱۳۹۶ ۰۸:۱۲ ب.ظ

سلام . سوالم درباره محاسبه lookahead هاست .
تا قبل از اینکه این سوال رو ببینم اینجور محاسبه میکردم :
هروقت موقع بسط متغیری شد ادامه قانون (بعد از متغیر ) رو با تک تک مجموعه lookahead های جاری concat میکردم و first میگرفتم. ولی اینجا توی این سوال نمیدونم "+" چطور به مجموعه lookahead ها اضافه شد! اصلا مگه موقع انتقال به یک State دیگه مجموعه lookahead تغییر میکنه ؟


[تصویر:  435229_695m_untitled-1.jpg]

RE: lookahead در پارسر LR 1 - Iranian Wizard - 01 اردیبهشت ۱۳۹۶ ۰۱:۲۲ ب.ظ

(۳۱ فروردین ۱۳۹۶ ۰۸:۱۲ ب.ظ)kilookiloo نوشته شده توسط:  سلام . سوالم درباره محاسبه lookahead هاست .
تا قبل از اینکه این سوال رو ببینم اینجور محاسبه میکردم :
هروقت موقع بسط متغیری شد ادامه قانون (بعد از متغیر ) رو با تک تک مجموعه lookahead های جاری concat میکردم و first میگرفتم. ولی اینجا توی این سوال نمیدونم "+" چطور به مجموعه lookahead ها اضافه شد! اصلا مگه موقع انتقال به یک State دیگه مجموعه lookahead تغییر میکنه ؟

سلام.متاسفانه این شکل ایراد داره.درستش به صورت زیر هستش:

[attachment=21664]

توضیح:
در حالت I ، ابتدا قلم [tex]E\: \longrightarrow\: .\: E\: +\: T\: ,\: \{\$\}[/tex] و [tex]E\: \longrightarrow\: .T\: ,\: \{\$\}[/tex] رو خواهید داشت. با توجه به اینکه علامت نقطه قبل از متغیر E اومده، پس باید دوباره E رو گسترش بدیم، که در این صورت lookahead متغیر E جدید برابر {+} میشه! یعنی دو قلم دیگه بصورت زیر به حالت I اضافه میشه:
[tex]E\: \longrightarrow\: .E\: +\: T\: ,\: \{+\}[/tex] و [tex]E\: \longrightarrow\: .T\: ,\: \{+\}[/tex]

که در اینصورت پس در کل بجای دو قلم جدید مربوط به متغیر E و دو قلم قبلیش میتونیم بنویسیم که :
[tex]E\: \longrightarrow\: .E\: +\: T,\: \{\$,+\}[/tex] و [tex]E\: \longrightarrow\: .T,\: \{\$,+\}[/tex]

و چون [tex]E\: \longrightarrow\: .\: T\: ,\: \{\text{ }\$\: ,\: +\}[/tex] هم به حالت I اضافه شده، در نتیجه lookahead متغیر T هم برابر [tex]\{\text{ }\$\: ,\: +\}[/tex] میشه. حالا که حالت I تشکیل شد، به راحتی میتونید ادامشو رسم کنی.

توجه: جهت حل این سوال، نیازی نبود که از اول و از حالت I رسم کنید.فقط کافی بود که حالت مقصد مربوط به همون حالتی که سوال گفته رو با واژه + رسم کنید.

RE: lookahead در پارسر LR 1 - kilookiloo - 01 اردیبهشت ۱۳۹۶ ۰۶:۴۵ ب.ظ

(۰۱ اردیبهشت ۱۳۹۶ ۰۱:۲۲ ب.ظ)Iranian Wizard نوشته شده توسط:  توضیح:
در حالت I ، ابتدا قلم [tex]E\: \longrightarrow\: .\: E\: +\: T\: ,\: \{\$\}[/tex] و [tex]E\: \longrightarrow\: .T\: ,\: \{\$\}[/tex] رو خواهید داشت. با توجه به اینکه علامت نقطه قبل از متغیر E اومده، پس باید دوباره E رو گسترش بدیم، که در این صورت lookahead متغیر E جدید برابر {+} میشه! یعنی دو قلم دیگه بصورت زیر به حالت I اضافه میشه:
[tex]E\: \longrightarrow\: .E\: +\: T\: ,\: \{+\}[/tex] و [tex]E\: \longrightarrow\: .T\: ,\: \{+\}[/tex]

که در اینصورت پس در کل بجای دو قلم جدید مربوط به متغیر E و دو قلم قبلیش میتونیم بنویسیم که :
[tex]E\: \longrightarrow\: .E\: +\: T,\: \{\$,+\}[/tex] و [tex]E\: \longrightarrow\: .T,\: \{\$,+\}[/tex]

و چون [tex]E\: \longrightarrow\: .\: T\: ,\: \{\text{ }\$\: ,\: +\}[/tex] هم به حالت I اضافه شده، در نتیجه lookahead متغیر T هم برابر [tex]\{\text{ }\$\: ,\: +\}[/tex] میشه. حالا که حالت I تشکیل شد، به راحتی میتونید ادامشو رسم کنی.

توجه: جهت حل این سوال، نیازی نبود که از اول و از حالت I رسم کنید.فقط کافی بود که حالت مقصد مربوط به همون حالتی که سوال گفته رو با واژه + رسم کنید.
خیلی خیلی ممنونم , بله سوال رو با i که گفته حل کردم موقع بررسی بود که به مشکل خوردم