نظریه زبان ها و ماشین ها مقدمه و پیش درآمد

1396/1/12 محمدرضا احمدآبادی 4162

با سلام . محمدرضا احمدآبادی هستم با آموزش نظریه زبانها و ماشین ها در خدمتتون  هستم.  امیدوارم لحظات خوبی را باهم در این دوره داشته باشیم.

اول یه مقدمه از این مبحث براتون بگم. این مبحث یکی از مباحث تخصصی رشته کامپیوتر و فناوری اطلاعات می باشد. این موضوع  که قراره در این دوره یادبگیریم  در هیچ جایی از اون چیزی نشنیده ایم تا خود این درس . برای همین شاید در فهمش مشکل داشته باشیم.

بذارید یه مثال براتون بزنم  سال اول ابتدایی  یادتون میاد ، همه ما آخر اون سال چیزی به اسم الفبا یادگرفته بودیم.  قبل از اون نه میدونستیم الفبا چیه ونه چه شکلی هست برای همین اوایل برای ما سخت بود اما کم کم راه افتادیم و از این الفبا در همه جا استفاده کردیم . این درس هم شبیه به الفبا هست ، اولش شاید براتون سخت باشه اما وقتی با من قدم به قدم بیایید جلو متوجه خواهید شد که اگر در این موضوع کار کنید  چقدر میتونه این درس شیرین براتون باشه.

شاید بپرسید  نظریه زبانها کجا کاربرد داره؟ اصلا به چه درد میخوره؟

جواب سوالتونو بذارید اینطور بگم، الان در این کانال شما دارید با انواع زبان های برنامه نویسی آشنا میشوید . همه این زبان ها یا کامپایلر داره یا مفسر داره  و بعضی هم هردو را دارا هستند. این کامپایلر و مفسر وظیفشون اینه  که دستورایی که شما برای کامپیوتر به زبان محاوره دارید داخلش مینویسید ،  به زبان قابل فهم ماشین تبدیل میکنه ( یعنی همون صفر و یک ) .

فرض کنید در اینده شما میخواهید یک زبان برنامه نویسی طراحی و ابداع کنید  خب قبل از همه چیز باید کامپایلر زبان خودتونو بنویسید و به ماشین بگید در این زبان هر دستور به چه شکلی هست و چه برداشتی باید از این دستور انجام بشه .   برای طراحی یک کامپایلر شما باید با نظریه زبان ها و ماشین ها  آشنا باشید و بلکه  هم بیشتر ازآاشنایی باید بدونید.

خب بریم سراغ اصل مطلب
برای جلسه اول  باهم یه سری اصطلاحات اولیه را مرور میکنیم .

انواع زبان ها:
زبان محاوره : زبان روزمره ، زبان گفتار خودمون.
زبان های ریاضی: فکر کنم همه شما از جمله خودم به این زبان ارادت دارید . وقتی یه قضیه مطرح میشه  برای تعریف استاندارد از این نوع نگارش استفاده میشود.
زبان ماشین (کامپیوتر).

مفاهیم اصلی  مربوط به زبان ماشین و کامپیوتر شامل موارد زیر میشود : 1- عبارت های منظم 2- گرامرها 3- ماشین ها

البته  فعلا از من تعاریف  3 مورد بالا را نخواهید  ولی بهتون قول میدم به وقتش هرکدومو سر فرصت باز خواهیم کرد و با هرکدوم  درست و حسابی اشنا خواهیم شد فقط  از من داشته باشید  این 3 مورد بالا ابزارهایی برای توصیف زبان هستند.

الفبا: یک مجموعه متناهی و غیر تهی از سمبل هایی که به هر یک از انها الفبا گفته میشود. معمولا یک مجموعه الفبا را با نماد ∑ نشان میدهند.

مثال) مجموعه الفبای زبان انگلیسی
∑={a,b,….,z,A,B,….,Z}
مجموعه الفبای زبان برنامه نویسی  c
∑={if, while,for,…}

البته توجه دارید که این مجموعه ها متناهی هستندو غیرتهی  .

رشته: دنباله ای است متناهی از عناصر الفبایک زبان.
 معمولا در تعریف یک زبان  از حروف انتهایی الفبای انگلیسی برای نشان دادن نام رشته ها استفاده میشود . در بیشتر موارد یک رشته را با نماد w نشان میدهند. الیته این قانون  نیست بلکه  مرسوم است که این روش کار رعایت شود.

مثال)
 ∑={a,b} →  w=ab

طول رشته: به تعداد سمبل های تشکیل دهنده یک رشته طول رشته گفته میشود . طول رشته را معمولا به صورت |W| و گاهی  اوقات  به صورت  (n(w نمایش میدهند. برای زبان مثال قبلی  طول رشته ای که در مثال آوردیم میشود 2

تعداد الفبای مشخص در رشته: تعداد الفبایی مثل a در یک رشته را با یکی از دو نمادw|a|  و(na(w نشان میدهند.

مثال ) اگر زبانی داشته باشیم با الفبای ∑={a,b,d}  و رشته w=baadab عضو زبان باشد انگاه  ( nb(w چه مقدار خواهد بود؟ nb(w)=2

یعنی تعداد تکرار حرف b  در این رشته 2 بار است

زیر رشته: اگر w=xyz یک رشته باشد به گونه ای که*∑ x,y,z ԑباشد ، هر دنباله y یک زیر رشته از w  خواهد یود.

نکته: اگر رشته ای دارای طول n باشد  ، مجموعه زیررشته های آن دارای رشته هایی از طول صفر تا طول n  خواهد بود .

مثال) اگر w=abc باشد، مجموعه زیررشته های ان چه خواهد بود؟
{λ,a,b,c,ab,bc,abc}
λهمون زیر رشته با طول صفر هست.
λ: بخونید لامبدا

فکر کنم الان با این مثالی که برای شما گفتم همتون به یاد مبحث زیر مجموعه ها در ریاضی افتادید. خب از طرفی حق با شماست این مبحث خیلی به اون بحث شباهت داره و نزدیکه  اما یه فرق کوچیک این جا هست که باعث تمایز بین این دو بحث هست . به مثالی که براتون گفتم یه بار دیگه توجه کنید . من زیر رشته هارا این جوری نوشتم {λ,a,b,c,ab,bc,abc} اما زیر رشته ac  را ننوشتم  چرا؟ چون در این رشته ای که به عنوان مرجع به من داده شده الفبای a  در کنار الفبای c  اورده نشده بود و من هم اجازه نداشتم در مجموعه زیر رشته این دو الفبارا کنار هم بیاورم. اما در مبحث مجموعه ها این محدودیت  برای زیرمجموعه نوشتن در کار نیست ، بقیه قوانین مربوط به مجموعه ها در زیررشته ها صدق میکند.

پسوند و پیشوند:
اگر w=xy یک رشته باشد به گونه ای که* ∑ x,yԑ  انگاه  x  یک پیشوند از رشته w  و y یک پسوند برای w  خواهد بود.

نکته: اگر w  یک رشته به طول  n  باشد ، مجموعه پیشوند ها و پسوند های  رشته w  هر یک دارای n+1 عضو خواهد بود.

مثال) اگر w=aabb  باشد انگاه مجموعه پیشوند ها و پسوند ها ی ان دارای چند عضو خواهد بود؟

برای نوشتن مجموعه پیشوند ها از سمت چپ رشته شروع میکنیم و دونه به دونه یه سمبل الفبا را میبینیم و در کنار سمبل های دیده شده قرار می دهیم.
 prefix= λ, a,aa,aab,aabb

برای نوشتن  مجموعه پسوند ها از سمت راست شروع به دیدن میکنیم اما برای نوشتن نباید از راست به چپ بنویسیم بلکه باید از چپ به راست بنویسیم
postfix=λ,b,bb,abb,aabb

اگر با جمله بالا گیج شدید به نحوه نوشتار من دقت کنید به این ترتیب عمل کردم از سمت راست دیدم اما از سمت راست اگر میخواستم بنویسم به جای  زیر رشته abb باید مینوشتم bba . ولی در صورتی که اصلا این زیر رشته متعلق به رشته اصلی نیست.

خب اگر تعداد این دو زیر رشته را بشماریم میبینم تعداد 10 تا خواهد بود اما همان طور که در مجموعه ها میگفتیم عناصر تکراری یک بار در شمارش حساب میشوند این جا هم باید یک بار شمارش شوند پس جواب سوال میشود 8.

امیدوارم خسته نشده باشید . اگر در حین تعاریف به نگارش گنگی رسیدید که میبینید متوجه نمیشوید مثل  *∑  هیچ نگران نباشید در جلسه بعدی همه این سوالات شما بر طرف خواهد شد من چون قصد داشتم تعریف استاندارد را برای شما بیاورم مجبور بودم از این نحوه تعریف استفاده کنم وگرنه در زیر اون تعریف استاندارد سعی کردم با یک مثال  به طور عامیانه منظورمو برسونم تا زیاد در گیر اون تعریف استاندارد نشوید.

خب به پایان بحث امروزمون رسیدیم . این مطالب را تا جلسه بعدی سعی کنید یکی دوبار بخونید. تا برای یادگیری جلسه بعدی ذهنتان آمادگی داشته باشد.