شكل باكوس-ناور الموسع

في علم الحاسوب ، تُعدّ صيغة باكوس-ناور الموسّعة ( EBNF ) مجموعة من رموز ما وراء التركيب ، يُمكن استخدام أيٍّ منها للتعبير عن قواعد نحوية خالية من السياق . تُستخدم EBNF لتقديم وصف رسمي للغة رسمية ، مثل لغات برمجة الحاسوب . وهي امتداد لصيغة باكوس-ناور الأساسية (BNF) لما وراء التركيب. طُوّرت EBNF لأول مرة على يد نيكلاوس ويرث ، حيث دمج بعض المفاهيم (مع اختلاف في التركيب والرموز) من رموز ويرث التركيبية . واليوم، تُستخدم العديد من صيغ EBNF المختلفة. اعتمدت المنظمة الدولية للتوحيد القياسي معيارًا للصيغة الإنجليزية القائمة على الأدلة (EBNF) ، وهو ISO /IEC 14977، في عام 1996. [ 1 ] [ 2 ] ومع ذلك، وفقًا لزايتسيف، فإن هذا المعيار "لم يُسفر إلا عن إضافة ثلاث لهجات أخرى إلى الفوضى"، وبعد الإشارة إلى عدم نجاحه، يُشير أيضًا إلى أن صيغة ISO EBNF لا تُستخدم حتى في جميع معايير ISO. [ 3 ]

تستخدم هذه المقالة صيغة EBNF كما حددتها المنظمة الدولية للمعايير (ISO) في الأمثلة التي تنطبق على جميع صيغ EBNF. أما صيغ EBNF الأخرى فتستخدم اصطلاحات نحوية مختلفة نوعًا ما.

الأساسيات

EBNF هو رمز يعبر عن بنية لغة رسمية. [ 4 ] يتكون EBNF من رموز نهائية وقواعد إنتاج غير نهائية، وهي القيود التي تحكم كيفية دمج الرموز النهائية في تسلسل صحيح. تشمل أمثلة الرموز النهائية الأحرف الأبجدية الرقمية وعلامات الترقيم والمسافات البيضاء .

تحدد صيغة EBNF قواعد الإنتاج حيث يتم تعيين تسلسلات الرموز على التوالي إلى رمز غير طرفي :

الرقم بدون الصفر = "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ; الرقم = "0" | الرقم بدون الصفر ;

تُحدد قاعدة الإنتاج هذه الرقم غير النهائي الموجود على يسار التخصيص. يُمثل الخط العمودي بديلاً، وتُحاط الرموز النهائية بعلامات اقتباس متبوعة بفاصلة منقوطة كحرف إنهاء. وبالتالي، فإن الرقم هو 0 أو رقم لا يشمل الصفر، والذي يمكن أن يكون 1 أو 2 أو 3 وهكذا حتى 9 .

يمكن أن تتضمن قاعدة الإنتاج أيضًا سلسلة من الرموز الطرفية أو غير الطرفية، يفصل بين كل منها فاصلة:

اثنا عشر = "1" ، "2" ؛ مئتان وواحد = "2" ، "0" ، "1" ؛ ثلاثمئة واثنا عشر = "3" ، اثنا عشر ؛ اثنا عشر ألفًا ومائتان وواحد = اثنا عشر ، مائتان وواحد ؛

يمكن تمثيل التعبيرات التي يمكن حذفها أو تكرارها من خلال الأقواس المعقوفة { ... }:

عدد صحيح موجب = رقم باستثناء الصفر ، { رقم } ؛

في هذه الحالة، تُعدّ السلاسل 1 ، 2 ، ...، 10 ، ...، 10000 ، ... تعابير صحيحة. ولتمثيل ذلك، يمكن تكرار كل ما هو موجود داخل الأقواس المعقوفة بشكل عشوائي، بما في ذلك عدم تكراره على الإطلاق.

يمكن تمثيل الخيار باستخدام الأقواس المربعة [...]. أي أن كل ما هو موجود داخل الأقواس المربعة قد يكون موجودًا مرة واحدة فقط، أو غير موجود على الإطلاق:

عدد صحيح = "0" | [ "-" ], عدد صحيح موجب ؛

لذلك، فإن العدد الصحيح هو صفر ( 0 ) أو عدد صحيح موجب يمكن أن يسبقه علامة ناقص اختيارية .

كما يوفر EBNF، من بين أمور أخرى، بناء الجملة لوصف التكرارات (لعدد محدد من المرات)، واستبعاد جزء من الإنتاج، وإدراج التعليقات في قواعد EBNF.

جدول الرموز

يمثل ما يلي معيار ISO/IEC 14977 المقترح، من قبل RS Scowen، الصفحة 7، الجدولين 1 و2.

الاستخدامالترميزبديلمعنى
تعريف=
سلسلة،
إنهاء الخدمة;.
التناوب|/ أو  !
خياري[...](/ ... /)لا شيء أو مرة واحدة
تكرار{ ... }(: ...  :)لا شيء أو أكثر
التجميع(...)
سلسلة طرفية"..."...
تعليق(* ... *)
تسلسل خاص؟ ...  ؟
استثناء-

أمثلة

مخطط بناء الجملة

EBNF

حتى صيغة EBNF يمكن وصفها باستخدام صيغة EBNF. انظر إلى القواعد النحوية أدناه (باستخدام اصطلاحات مثل "-" للإشارة إلى فصل المجموعات، و"+" للإشارة إلى تطابق واحد أو أكثر، و"؟" للدلالة على الاختيارية):

الحرف = "أ" | "ب" | "ت" | "د" | "هـ" | "و" | "ز" | "ح" | "ط" | "ي" | "ك" | "ل" | "م" | "ن" | "س" | "ع" | "ف" | "ق" | " ر" | " س" | "ت" | " ث " | "خ" | "ي" | " ي " | " ز " | "أ" | "ب" | "ت" | "د" | "هـ" | " و " | "ز" | "ح" | "ط" | "ي" | " | "ل" | "م" | "ن" | " س" | " ف" | " ق" | " ر " | "س" | "ت" | "ث" | "خ" | "ي" | "ز" ;الرقم = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ؛الرمز = "[" | "]" | "{" | "}" | "(" | ")" | "<" | ">" | "'" | '"' | "=" | "|" | "." | ' ' | ";" | "-" | "+" | "*" | "? " | "\n" | "\t" | "\r" | "\f" | "\b" ;الحرف = حرف | رقم | رمز | "_" | " " ; المعرف = حرف ، { حرف | رقم | "_" } ;S = { " " | "\n" | "\t" | "\r" | "\f" | "\b" } ;terminal = "'" , character - "'" , { character - "'" } , "'" | '"' , character - '"' , { character - '"' } , '"' ;فاصلة النهاية = ";" | "." ;term = "(" , S , rhs , S , ")" | "[" , S , rhs , S , "]" | "{" , S , rhs , S , "}" | terminal | identifier ;العامل = الحد ، S ، "؟" | الحد ، S ، "*" | الحد ، S ، "+" | الحد ، S ، "-" ، S ، الحد | الحد ، S ؛الربط = ( S ، العامل ، S ، "," ؟) +؛ التناوب = (S، الربط، S، "|"؟ ) + ؛rhs = التناوب ؛ lhs = المعرف ؛القاعدة = lhs ، S ، "=" ، S ، rhs ، S ، terminator ؛القواعد = ( S ، القاعدة ، S ) * ؛

باسكال

يمكن تعريف لغة برمجة شبيهة بلغة باسكال تسمح فقط بعمليات الإسناد في EBNF على النحو التالي:

(* صيغة برنامج بسيطة في EBNF - ويكيبيديا *) البرنامج = 'PROGRAM' ، مسافة بيضاء ، المعرف ، مسافة بيضاء ، 'BEGIN' ، مسافة بيضاء ، { تعيين ، ';' ، مسافة بيضاء 'END.' ؛ المعرف = حرف أبجدي ، { حرف أبجدي | رقم } ؛ الرقم = [ "-" رقم ، { رقم } ؛ سلسلة نصية = '"' , { جميع الأحرف - '"' }, '"' ; التعيين = مُعرِّف ، ':=" , ( رقم | مُعرِّف | سلسلة نصية ) ؛ حرف أبجدي = "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | " V " | "W" | "X" | "Y" | "Z" ؛ رقم = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | " 8" | "9" ؛ مسافة بيضاء = ؟ أحرف مسافة بيضاء ؟ ؛ جميع الأحرف = ؟ جميع الأحرف المرئية ؟

على سبيل المثال، يمكن أن يكون البرنامج الصحيح نحوياً كالتالي:

PROGRAM DEMO1 BEGIN A := 3 ; B := 45 ; H :=- 100023 ; C := A ; D123 := B34A ; BABOON := GIRAFFE ; TEXT := " Hello world !" ; END .

يمكن توسيع اللغة بسهولة لتشمل تدفقات التحكم ، والتعبيرات الحسابية، وتعليمات الإدخال/الإخراج. عندها سيتم تطوير لغة برمجة صغيرة وسهلة الاستخدام.

مزايا مقارنة بـ BNF

يمكن تمثيل أي قواعد نحوية مُعرَّفة في صيغة EBNF في صيغة BNF أيضًا، مع أن التمثيلات في الأخيرة تكون أطول عمومًا. على سبيل المثال، لا يمكن التعبير عن الخيارات والتكرارات مباشرةً في صيغة BNF، بل تتطلب استخدام قاعدة وسيطة أو قاعدة إنتاج بديلة مُعرَّفة إما على أنها لا شيء، أو قاعدة الإنتاج الاختيارية للخيار، أو قاعدة الإنتاج المُكرَّرة لنفسها، بشكل متكرر، للتكرار. ويمكن استخدام نفس هذه البنى في صيغة EBNF.

تستخدم صيغة BNF الرموز ( <،،،، ) لنفسها، لكنها لا تُحيط السلاسل الطرفية بعلامات اقتباس. هذا يمنع استخدام هذه الرموز في اللغات، ويتطلب رمزًا خاصًا للسلسلة الفارغة. في صيغة EBNF، تُحاط السلاسل الطرفية بعلامات اقتباس ( ... أو ... >) . يمكن حذف الأقواس الزاوية ( ... ) للرموز غير الطرفية .|::=""''<>

لا يمكن لصيغة BNF أن تمثل قاعدة إلا في سطر واحد، بينما في صيغة EBNF ;يشير حرف الإنهاء، وهو حرف الفاصلة المنقوطة، إلى نهاية القاعدة.

علاوة على ذلك، تتضمن EBNF آليات للتحسينات، وتحديد عدد التكرارات، واستبعاد البدائل، والتعليقات، وما إلى ذلك.

الاتفاقيات

  1. وفقًا للقسم 4 من معيار ISO/IEC 14977، يتم استخدام الاصطلاحات التالية:
    • يُكتب كل مُعرِّف وصفي في صيغة BNF الموسعة على شكل كلمة واحدة أو أكثر متصلة ببعضها بواسطة واصلات . ومع ذلك، يبدو أن ربط الكلمات ينطبق فقط على الإشارة إلى مُعرِّفات وصفية خارج اللغة الوصفية نفسها، كما هو موضح في أمثلة المعيار.
    • المعرف الفوقي الذي ينتهي بـ -symbol هو اسم رمز طرفي لـ Extended BNF.
  2. الحرف العادي الذي يمثل كل عامل من عوامل صيغة BNF الموسعة وأسبقيته الضمنية هو (أعلى أسبقية في الأعلى):
    * رمز التكرار - رمز الاستثناء ، رمز الربط | رمز فاصل التعريف = رمز التعريف ؛ رمز الإنهاء . رمز الإنهاء
  3. يتم تجاوز الأسبقية العادية بواسطة أزواج الأقواس التالية:
    (* رمز-بداية-التعليق رمز-نهاية-التعليق *) ' رمز-الاقتباس-الأول رمز-الاقتباس-الأول ' ( رمز-بداية-المجموعة رمز-نهاية-المجموعة ) [ رمز-بداية-الخيار رمز-نهاية-الخيار ] { رمز -بداية-التكرار رمز-نهاية-التكرار } ؟ رمز-التسلسل-الخاص رمز-التسلسل-الخاص ؟ " رمز-الاقتباس-الثاني رمز-الاقتباس-الثاني "
    رمز الاقتباس الأول هو الفاصلة العليا كما هو مُعرَّف في معيار ISO/IEC 646:1991، أي Unicode U+0027 ( '). يُظهر الخط المُستخدم في معيار ISO/IEC 14977:1996(E) هذا الرمز بشكلٍ مُشابهٍ جدًا للعلامة الحادة، Unicode U+00B4 ( ´)، مما قد يُسبب بعض الالتباس. مع ذلك، يستند معيار ISO Extended BNF إلى معيار ISO/IEC 646:1991، "مجموعة الأحرف المُرمَّزة ذات 7 بتات لتبادل المعلومات"، كمرجعٍ معياري، ولا يُشير إلى أي مجموعات أحرف أخرى، لذا من الناحية الرسمية، لا يوجد أي لبس مع أحرف Unicode خارج نطاق ASCII ذي 7 بتات.

على سبيل المثال، توضح قواعد بناء الجملة التالية إمكانيات التعبير عن التكرار:

aa = "A" ; bb = 3 * aa , "B" ; cc = 3 * [ aa ], "C" ; dd = { aa }, "D" ; ee = aa , { aa }, "E" ; ff = 3 * aa , 3 * [ aa ], "F" ; gg = { 3 * aa }, "G" ; hh = ( aa | bb | cc ), "H" ;

السلاسل الطرفية المحددة بهذه القواعد هي كما يلي:

aa: A bb: AAAB نسخة إلى: C AC AAC AAAC dd: D AD AAD AAAD AAAAD إلخ. هه: AE AAE AAAE AAAAE AAAAAE إلخ. ff: AAAF AAAAF AAAAAF AAAAAAF gg: G AAAG AAAAAAG إلخ. hh: اه AAABH CH ACH AACH AAACH

قابلية التوسعة

وفقًا لمعيار ISO 14977، يُفترض أن يكون تنسيق EBNF قابلاً للتوسيع، وقد ذُكرت خاصيتان. الأولى هي جزء من قواعد EBNF، وهي التسلسل الخاص، الذي يُمثل نصًا عشوائيًا محاطًا بعلامات استفهام. ويخرج تفسير النص داخل التسلسل الخاص عن نطاق معيار EBNF. على سبيل المثال، يمكن تعريف حرف المسافة بالقاعدة التالية:

مسافة = ؟ الحرف ASCII رقم 32 ؟ ؛

تتمثل الميزة الثانية للتوسيع في استغلال حقيقة أنه لا يمكن وضع الأقواس في صيغة EBNF بجوار المعرفات (بل يجب دمجها معها). فيما يلي مثال صحيح لصيغة EBNF:

شيء ما = foo ، ( bar 

ما يلي ليس من قبيل الممارسات التعليمية القائمة على الأدلة (EBNF) الصالحة:

شيء ما = foo ( bar );

لذا، يمكن لامتداد EBNF استخدام هذه الصيغة. على سبيل المثال، في قواعد لغة ليسب ، يمكن تعريف تطبيق الدالة بالقاعدة التالية:

دالة التطبيق = قائمة ( الرمز ، { التعبير } 

انظر أيضاً

مراجع

  1. سكاوين، روجر س. (1993). BNF الموسع - معيار أساسي عام . ندوة معايير هندسة البرمجيات.
  2. المعيار الدولي ( ISO 14977 )، وهو أحد تنسيقات EBNF العديدة، متاح الآن مجانًا كملف PDF مضغوط بصيغة Zip .
  3. زايتسيف، فاديم (26-30 مارس 2012). "كانت صيغة BNF موجودة: ماذا فعلنا حيال التنوع غير الضروري في تدوين التعريفات النحوية؟" (ملف PDF) . وقائع الندوة السنوية السابعة والعشرين لجمعية ACM حول الحوسبة التطبيقية (SAC '12) . ريفا ديل جاردا، إيطاليا. ص 1 - عبر GrammarWare.net. 
  4. باتيس، ريتشارد إي. (12 أغسطس 2013). "EBNF: تدوين لوصف بناء الجملة" (ملف PDF) . ICS.UCI.edu . جامعة كاليفورنيا، إرفاين . ص 1. تاريخ الاسترجاع : 18 مايو 2025 .