فرم نرمال چامسکی
الگو:تمیزکاری در نظریه زبان صوری، یک گرامر مستقل از متن هنگامی در فرم نرمال چامسکی (نامگذاری به خاطر نوآم چامسکی) است که تمام قوانین تولید آن با فرم زیر باشید: الگو:چپچین
- یا
- یا
- ,
الگو:پایان چپچین به طوریکه , و کاراکترهای غیرپایانه و یک کاراکتر پایانه (کاراکتری که یک مقدار ثابت را نشان میدهد)، کاراکتر شروع، و رشته تهی است. همچنین هیچکدام از یا نمیتوانند کاراکتر شروع باشند، و سومین قانون تولید فقط زمانی ظاهر میشود که در باشد، یعنی زبان توسط گرامر مستقل از متن ایجاد شده باشد. هر گرامر در فرم نرمال چامسکی یک گرامر مستقل از متن میباشد و برعکس، هر گرامر مستقل از متنی را میتوان به فرم معادل نرمال چامسکی تبدیل کرد. چندین الگوریتم برای انجام چنین تبدیلی شناخته شدهاست. این تبدیل در بسیاری از کتابهای درسی در نظریه ماشینها، مانند Hopcroft و Ullman، ۱۹۷۹ توصیف شدهاست. همانطور که توسط "Lange and Leiß" اشاره شدهاست، اشکال این تبدیل این است که میتواند به بزرگ شدن نامطلوب اندازه گرامر منجر شود. اندازه یک گرامر، مجموع اندازههای قانونهای تولید آن است، که در آن سایز هر قانون طول سمت راست آن به علاوه یک میباشد. اندازه گرامر را نشان میدهد، این اندازه در بدترین حالت بین و و وابسته به الگوریتم تبدیل استفاده شده، میباشد.
تعریف جایگزین
تعریف دیگر فرم نرمال چامسکی به صورت زیر است: (برای مثال Hopcroft و Ullman، ۱۹۷۸ و Hopcroft et al. 2006) الگو:چپچین
- یا
به طوریکه , و کاراکترهای غیرپایانه و یک کاراکتر پایانه است. هنگام استفاده از این تعریف، یا میتوانند کاراکتر شروع باشند. فقط آن گرامرهای مستقل از متنی که رشتهٔ تهی ایجاد نمیکنند میتوانند به فرم کاهش یافتهٔ چامسکی تبدیل شوند.
تبدیل یک گرامر به فرم نرمال چامسکی
- معرفی
- معرفی یک متغیر شروع جدید ، که متغیر شروع قبلی است.
- همهٔ قوانین را کاهش دهید.
- فرمهایی به شکل , هستند که and , که متغیرهای الفبای CFGهستند.
- هر قانون شامل در سمت راستش را حذف کنید. برای هر قانون شامل در سمت راستش، مجموعهای از قوانین جدید از ترکیبات مختلف است که با جایگزین شده یا نشده باشد.
- اگر یک قانون فقط را به صورت تنها در سمت راست داشته باشد، قانون را اضافه کنید مگر اینکه قبلاً از پردازش حذف شده باشد.
- برای مثال گرامر:الگو:چپچین
- الگو:پایان
- فقط یک قانون تهی دارد، هنگامی که حذف شود، داریم: الگو:چپچین
- الگو:پایان
- توجه کنید که ما باید تمامی احتمالات را در نظربگیریم و ما در واقع در نهایت ۳ قانون رااضافه میکنیم.
- همهٔ قوانین واحد را کاهش دهید
- الگو:چپچینالگو:پایان
- پس از آن که همهٔ قوانین حذف شدند، شما میتوانید شروع به از بین بردن قوانین واحد، یا قوانینی که سمت چپ آن شامل یک متغیر و هیچ ترمینالی ندارد (است که در تضاد با CNF)کنید.
- برای حذف
- , که که یک رشته از متغیرها و پایانه هاست، قانون را اضافه کنید مگر اینکه قانون پایهای باشد که قبلاً حذف شدهاست.
- سایر قوانینی که در فرم نرمال چامسکی نیستند را حذف کنید
- با , جایگذاری کنید کهها متغیرهای جدید هستند.
- اگر را با متغیر جایگزین کنید و قانون را اضافه کنید.