پیدا کردن Head یک زبان از روی گرامر مستقل از متن - نسخهی قابل چاپ |
پیدا کردن Head یک زبان از روی گرامر مستقل از متن - mehdi1993 - 23 آبان ۱۳۹۳ ۰۴:۳۸ ب.ظ
سلام دوستان خسته نباشید!! سوال داشتم در مورد پیدا کردن Head یک زبان از روی گرامر مستقل از متنش!! کسی الگوریتمی داره؟ |
RE: پیدا کردن Head یک زبان از روی گرامر مستقل از متن - Pakniat - 23 آبان ۱۳۹۳ ۱۰:۲۰ ب.ظ
اگر منظورتون از head : [tex]head(L)=\{x:\: y\: \in Sigma^{\ast}\: for\: xy\in L\}[/tex] باشد : گرامر مستقل از متن که دارید رو طی مراحلی به فرم گریباخ ببرید - سپس با طی n مرحله رشته های موجود رو یاداشت کنید-x رو دارید! |
RE: پیدا کردن Head یک زبان از روی گرامر مستقل از متن - mehdi1993 - 24 آبان ۱۳۹۳ ۰۲:۴۴ ب.ظ
ببخشید مگه چندتا head درایم تو نظریه!!! ممنون بایت جوابتون اما من میخوام با عملگر head از روی گرامر یک زبان مثل L گرامر Head اون زبان رو بدست بیارم!!! |
RE: پیدا کردن Head یک زبان از روی گرامر مستقل از متن - fatemeh69 - 26 آبان ۱۳۹۳ ۰۱:۰۰ ب.ظ
این تمرین ۱۲ بخش ۱-۵ لینزه روند کار رو از روی مثال توضیح می دم: فرض کنید گرامر ما به این صورت باشه: S-->aABb A-->aAb|lambda B-->xy خب واضحه که گرامر ها همشون از S اشتقاق می شن و ما تو Head گرفتن از یه زبانی از آخر رشته های اون زبان حذف می کنیم به تعداد هیچ کاراکتر به تعداد یک کاراکتر به تعداد دو کاراکتر و ... از آخر رشته های زبان کم می کنمی حالا اگه بخواهیم از آخر رشت ههای زبان کاراکتری رو حذف کنیم باید از آخر S کم کنسم چون می دونیم همه رشته ها از S اشتقاق می شن و اگه توی قانون S-->aABb همه ی نان ترمینال ها جایگذاری بشن رشته ما بدشتاومده پس آخر رشته می شه آخر S تو همون قانون اول به aABb نگاه کنید اگه از خود این قانون بخواهیم head بگیریم یه بار می شه خودش یه بار می شه این که اون b آخر رو برداریم پس در مورد b آخر دو تا تصمیم داریم باشه یا نباشه که این دو حالت رو این جوری تو گرامر می ذاریم که به جای اون b آخر یه نان ترمینال جدید تعریف می کنیم که می تونه b یا لامبدا باشع پس گرامر بعدی مون می شه: S1-->aABC A-->aAb|lambda B-->xy C-->b|lambda خب اگه تصمیم بگیریم که اون b آخر می مونه که هیچ اما اگه تصمیم بگیریم b آخر رو برداریم پس انگار که در قانون اول به جای C لامیدا قرار دادیم و قانون C رو از گرامرمون برمی داریم پس قانون اول می شه این شکلی: S-->aAB که حالا آخر شته مون میشه آخر B. حالا باز در مورد B آخر بحث می کنیم که باید به جاش xy بذاریم حالا رو آخرین کاراکترش یعنی y حرف می زنیم دو حالت داره بمونه یا برداشته شه اگه بخواد بمونه که می شه y اگه بخواد برداشته شه باید به جاش لاندا بذاریم پس گرامر دوممون می شه: S2-->aAB A-->aAb|lambda B-->xD D-->y|lambda حالا اگه این y بمونه که هیچ اکه نمونه کاراکتر قبلی ش x دو حالت داره بمونه یا برداشته شه گارمر سوم به این صورته: S3-->aAB A-->aAb|lambda B-->x|lambda اگه جای B رشته x بشینه که هیچ اگگه جاش لامبدا بشینه قانون اول می شه این شکلی: S-->aA که حالا این A جاش aAb یا لاندا می شینه به این که ممکنه جاش لاندا بشینه فعلا کار نداریم اما اگه جای A رشته aAb بشینه باز سر b آخر دو حالت داریم گرامر چهارممون می شه: S4-->aA A-->aAE|lambda E-->b|lambda اگه به جای E حرف b ذو بذاریم که هیچ اما اکه لاندا بذاریم می رسیم به aA که اون A آخرش می تونه جاش aA یا لاندا بشینه (که خود گرامر اینو از قبل داشته ) پس: S5-->aAB A-->aA|lambda و بعد خود A اگه جاش لاندا بشینه S6-->aAB A-->a|lambda و اگه در قانون اول به جای A لاندا بشینه : S7-->a|lambda و دیگه بیشتر از این جا نداره که کوچیک بشه یعنی واضحه که همیشه کوچکترین رشته عضو head رشته لاامبداست حالا گرامر مربوط به Head(L) برابر است با: S-->S1|S2|S3|S4|S5|S6|S7 |