آخرین بروزرسانی 10 روز قبل

فرم طبیعی Backus (BNF) چیست؟

فرم نرمال Backus-Naur (BNF) چیست؟ سفری به اعماق گرامرها!

سلام رفقا! امروز می‌خوایم یه سری به دنیای عجیب و غریب گرامرها بزنیم و یه چیزی رو به اسم "فرم نرمال Backus-Naur" یا همون BNF خودمون رو بررسی کنیم. شاید اسمش یکم intimidating باشه، ولی نگران نباشید، قراره با یه زبون خودمونی و به زبون آدمیزاد توضیحش بدیم.

BNF دقیقا چیه؟

فرض کنید می‌خواید یه زبون جدید اختراع کنید. خب، باید یه سری قوانین و گرامر واسش تعریف کنید، درسته؟ BNF یه جور زبون برای تعریف کردن همین گرامرهاست. یه جور فرمول‌بندی که بهمون کمک می‌کنه قواعد یه زبون برنامه‌نویسی یا یه پروتکل رو به صورت دقیق و استاندارد بنویسیم. اسمش رو از دو تا دانشمند بزرگ به نام‌های جان بکوس و پیتر نائر گرفته.

چرا BNF مهمه؟

حالا ممکنه بپرسید اصلاً چرا باید وقتمون رو صرف یادگیری BNF کنیم؟ خب، چند تا دلیل مهم داره:

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

BNF چطوری کار می‌کنه؟

BNF از یه سری نماد و قاعده برای تعریف گرامر استفاده می‌کنه. مهم‌ترین نمادهاش اینا هستن:

  • < >: این علامت‌ها نشون‌دهنده یه "non-terminal" یا یه عنصر گرامری هستن که خودش از عناصر دیگه تشکیل شده. مثلاً <عبارت> می‌تونه یه عبارت ریاضی باشه.
  • ::=: این علامت نشون‌دهنده "تعریف" هست. یعنی چی؟ یعنی سمت چپ این علامت با چیزی که سمت راستش هست تعریف میشه. مثلاً <عبارت> ::= <عدد> + <عدد> یعنی "عبارت" از "عدد" به اضافه "عدد" تشکیل شده.
  • |: این علامت نشون‌دهنده "یا" هست. یعنی یه عنصر گرامری می‌تونه یکی از چند تا چیز مختلف باشه. مثلاً <عدد> ::= 1 | 2 | 3 یعنی "عدد" می‌تونه 1 یا 2 یا 3 باشه.
  • علامت‌های نقل قول (""): این علامت‌ها برای نشون دادن "terminal" ها استفاده میشن. Terminal ها عناصر پایه‌ای گرامر هستن که دیگه از چیز دیگه‌ای تشکیل نشدن. مثلاً "+" یه terminal هست.

یه مثال ساده از BNF

بیاید با یه مثال ساده، کار BNF رو بهتر درک کنیم. فرض کنید می‌خوایم گرامر یه عدد صحیح رو با BNF تعریف کنیم:

    <عدد_صحیح> ::= <رقم> | <عدد_صحیح> <رقم>
    <رقم> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
  

توی این مثال، <عدد_صحیح> یه non-terminal هست که می‌تونه یا یه <رقم> باشه، یا یه <عدد_صحیح> باشه که بهش یه <رقم> اضافه شده. <رقم> هم یه non-terminal هست که می‌تونه یکی از رقم‌های 0 تا 9 باشه.

BNF Extended (EBNF)

یه نسخه پیشرفته‌تر از BNF هم وجود داره به اسم EBNF (Extended Backus-Naur Form). EBNF یه سری امکانات اضافی به BNF اضافه کرده که کار تعریف گرامرها رو آسون‌تر می‌کنه. مثلاً توی EBNF می‌تونیم از علامت‌های زیر استفاده کنیم:

  • {}: این علامت نشون‌دهنده "تکرار" هست. یعنی چیزی که داخلش قرار گرفته، می‌تونه صفر بار یا بیشتر تکرار بشه.
  • []: این علامت نشون‌دهنده "اختیاری بودن" هست. یعنی چیزی که داخلش قرار گرفته، می‌تونه باشه یا نباشه.

با استفاده از EBNF، مثال عدد صحیح رو می‌تونیم این‌طوری بنویسیم:

    <عدد_صحیح> ::= <رقم> { <رقم> }
    <رقم> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
  

مقایسه BNF و EBNF

ویژگی BNF EBNF
تکرار ندارد (باید از بازگشت استفاده کرد) دارد ({})
اختیاری بودن ندارد (باید از چندین قانون استفاده کرد) دارد ([])
پیچیدگی گاهی پیچیده‌تر معمولا ساده‌تر

نتیجه‌گیری

خب، تا اینجا فهمیدیم BNF چیه، چرا مهمه و چطوری کار می‌کنه. یادگیری BNF می‌تونه یه ابزار قدرتمند برای هر کسی باشه که با زبون‌های برنامه‌نویسی، کامپایلرها یا پروتکل‌ها سروکار داره. امیدوارم این مطلب براتون مفید بوده باشه.

کلمات کلیدی

  • BNF
  • EBNF
  • گرامر
  • زبان برنامه‌نویسی
  • کامپایلر
  • فرم نرمال
  • تکنولوژی اطلاعات

سوالات متداول

BNF مخفف چیه؟
BNF مخفف Backus-Naur Form هست.
فرق BNF و EBNF چیه؟
EBNF یه نسخه توسعه یافته از BNF هست که امکاناتی مثل تکرار و اختیاری بودن رو بهش اضافه کرده.
چرا باید BNF رو یاد بگیریم؟
یادگیری BNF بهمون کمک می‌کنه گرامر زبون‌های برنامه‌نویسی رو بهتر بفهمیم، کامپایلرها رو درک کنیم و گرامرهای دقیق و بدون ابهام بنویسیم.
آیا BNF فقط برای زبان های برنامه نویسی استفاده می شود؟
خیر، BNF می تواند برای تعریف فرمت های داده، پروتکل های ارتباطی و حتی زبان های طبیعی نیز استفاده شود.
مخفف Backus Normal Form چیست؟
مخفف Backus Normal Form کلمه BNF می باشد.
BNF مخفف چیست؟
BNF مخفف Backus Normal Form می باشد.

کلمه BNF مخفف چیست؟

وقتی به BNF به عنوان مخفف Backus Normal Form اشاره می کنیم، منظور این است که BNF با گرفتن حروف اولیه هر کلمه مهم در Backus Normal Form تشکیل می شود. این فرآیند عبارت اصلی را به شکلی کوتاه تر و قابل مدیریت تر فشرده می کند و در عین حال معنای اصلی خود را حفظ می کند. بر اساس این تعریف، BNF مخفف Backus Normal Form است.

به اشتراک گذاشتن این مطلب در شبکه های اجتماعی

امتیاز شما به این مطلب

امتیاز: 5 از 5 (مجموع 1 رای)

اولین نفری باشید که در مورد این مقاله نظر می دهید!

949- V5
Terms & Conditions | Privacy Policy

techfeed.ir© 2024 All rights reserved