شكل باكوس-نور
تحتوي هذه المقالة على العديد من المشكلات. يُرجى المساعدة في تحسينها أو مناقشة هذه المشكلات على صفحة المناقشة . ( تعرف على كيفية ومتى يمكنك إزالة هذه الرسائل )
|
في علوم الكمبيوتر ، نموذج باكوس-نور (BNF؛ /ˌbækəsˈnaʊər / ؛ نموذج باكوس الطبيعي ) هو تدوين يستخدم لوصف بناء جملة لغات البرمجة أو اللغات الرسمية الأخرى . وقد طوره جون باكوس وبيتر نور . ويمكن وصف BNF بأنه تدوين ميتاسينتاكس لقواعد نحوية خالية من السياق . يتم تطبيق نموذج باكوس-نور حيثما تكون هناك حاجة إلى أوصاف دقيقة للغات، مثل مواصفات اللغة الرسمية، وفي الأدلة، وفي الكتب المدرسية حول نظرية لغات البرمجة. ويمكن استخدام BNF لوصف تنسيقات المستندات ومجموعات التعليمات وبروتوكولات الاتصال .
مع مرور الوقت، تم إنشاء العديد من الامتدادات والمتغيرات لنظام باكوس ناور الأصلي؛ وبعضها محدد بدقة، بما في ذلك شكل باكوس ناور الموسع (EBNF) وشكل باكوس ناور الموسع (ABNF).
ملخص
تصف قواعد الاشتقاق كيفية الجمع بين رموز مختلفة لإنتاج تسلسل صحيح نحويًا. تتكون قواعد الاشتقاق من ثلاثة مكونات: مجموعة من الرموز غير النهائية، ومجموعة من الرموز النهائية، وقواعد استبدال الرموز غير النهائية بتسلسل من الرموز. [1] تُكتب قواعد الاشتقاق المزعومة هذه على النحو التالي
< الرمز > ::= __تعبير__
أين:
<symbol>[2] هو متغير غير نهائي يقع دائمًا بين الزوج <>.::=يعني أنه يجب استبدال الرمز الموجود على اليسار بالتعبير الموجود على اليمين.__expression__يتكون من تسلسل واحد أو أكثر من الرموز الطرفية أو غير الطرفية حيث يتم فصل كل تسلسل بشريط عمودي "|" يشير إلى خيار ، ويكون الكل بمثابة استبدال محتمل للرمز الموجود على اليسار.
يجب إنشاء جميع التسلسلات الصحيحة نحويًا بالطريقة التالية:
- قم بتهيئة التسلسل بحيث يحتوي فقط على رمز بداية واحد.
- قم بتطبيق قواعد الاشتقاق على رمز البداية هذا والتسلسلات التالية من الرموز. [1]
إن تطبيق القواعد بهذه الطريقة قد يؤدي إلى إنتاج تسلسلات أطول وأطول، لذا فإن العديد من تعريفات BNF تسمح بتضمين رمز "حذف" خاص في المواصفات. يمكننا تحديد قاعدة تسمح لنا باستبدال بعض الرموز برمز "الحذف" هذا، والذي من المفترض أن يشير إلى أنه يمكننا إزالة الرموز من تسلسلنا مع الاحتفاظ بتسلسل صحيح نحويًا. [1]
مثال
على سبيل المثال، ضع في اعتبارك هذا BNF المحتمل لعنوان بريدي أمريكي :
< عنوان بريدي > ::= < جزء الاسم > < عنوان الشارع > < جزء الرمز البريدي >
< الجزء-الاسم > ::= < الجزء-الشخصي > < الاسم-الأخير > < الجزء-اللاحق-الاختياري > < نهاية-العمر > | < الجزء-الشخصي > < الجزء-الاسم >
< الجزء الشخصي > ::= < الاسم الأول > | < الحرف الأولي > "."
< عنوان الشارع > ::= < رقم المنزل > < اسم الشارع > < رقم الخيار > < نهاية الاستخدام >
< zip-part > ::= < town-name > "," < state-code > < ZIP-code > < EOL >
<opt-suffix-part> :: = "Sr." | "Jr." | <roman-numeral> | " " <opt-apt-num> ::
= " Apt " <apt-num> | "
" وهذا يترجم إلى الإنجليزية على النحو التالي:
- يتكون العنوان البريدي من جزء الاسم، متبوعًا بجزء عنوان الشارع ، متبوعًا بجزء الرمز البريدي .
- يتكون جزء الاسم من: جزء شخصي يتبعه اسم العائلة يتبعه لاحقة اختيارية (صغير أو كبير، أو رقم سلالة) ونهاية السطر ، أو جزء شخصي يتبعه جزء اسم (توضح هذه القاعدة استخدام التكرار في BNFs، وتغطي حالة الأشخاص الذين يستخدمون أسماء أولى ووسطى وأحرف أولى متعددة). [3]
- يتكون الجزء الشخصي من الاسم الأول أو الحرف الأول متبوعًا بنقطة.
- يتكون عنوان الشارع من رقم المنزل، متبوعًا باسم الشارع، متبوعًا بمواصفات الشقة الاختيارية ، متبوعًا بنهاية السطر.
- يتكون جزء الرمز البريدي من اسم المدينة ، متبوعًا بفاصلة، متبوعًا برمز الولاية ، متبوعًا بالرمز البريدي متبوعًا بنهاية السطر.
- يتكون جزء لاحقة opt من لاحقة، مثل "Sr." أو "Jr." أو رقم روماني ، أو سلسلة فارغة (أي لا شيء).
- يتكون رقم opt-apt من البادئة "Apt" متبوعة برقم الشقة، أو سلسلة فارغة (أي لا شيء).
لاحظ أن العديد من الأشياء (مثل تنسيق الاسم الأول ورقم الشقة والرمز البريدي والرقم الروماني) لم يتم تحديدها هنا. إذا لزم الأمر، يمكن وصفها باستخدام قواعد BNF إضافية.
تاريخ
يمكن إرجاع فكرة وصف بنية اللغة باستخدام قواعد إعادة الكتابة إلى عمل بانيني على الأقل ، وهو عالم نحوي سنسكريتي هندي قديم وعالم موقر في الهندوسية عاش في وقت ما بين القرن السادس والرابع قبل الميلاد . [4] [5] إن تدوينه لوصف بنية الكلمات السنسكريتية يعادل في قوته تدوين باكوس وله العديد من الخصائص المماثلة.
في المجتمع الغربي، كان يُنظر إلى القواعد النحوية لفترة طويلة على أنها موضوع للتدريس، وليس للدراسة العلمية؛ وكانت الأوصاف غير رسمية وموجهة للاستخدام العملي. في النصف الأول من القرن العشرين، بدأ علماء لغويون مثل ليونارد بلومفيلد وزيليج هاريس محاولات لإضفاء الطابع الرسمي على وصف اللغة، بما في ذلك بنية العبارة .
وفي الوقت نفسه، تم تقديم قواعد إعادة كتابة السلسلة كأنظمة منطقية رسمية ودراستها من قبل علماء الرياضيات مثل أكسل ثو (في عام 1914)، وإميل بوست (عشرينيات وأربعينيات القرن العشرين) وآلان تورينج (1936). قام نعوم تشومسكي ، الذي يدرس اللغويات لطلاب نظرية المعلومات في معهد ماساتشوستس للتكنولوجيا ، بالجمع بين اللغويات والرياضيات من خلال أخذ ما هو في الأساس صيغة ثو كأساس لوصف بناء الجملة في اللغة الطبيعية . كما قدم تمييزًا واضحًا بين القواعد التوليدية (تلك الخاصة بالقواعد النحوية الخالية من السياق ) وقواعد التحويل (1956). [6] [7]
اقترح جون باكوس ، مصمم لغة برمجة في شركة آي بي إم ، لغة ميتا من "الصيغ الميتا لغوية" [2] [9] [10] لوصف بناء جملة لغة البرمجة الجديدة IAL، المعروفة اليوم باسم ALGOL 58 (1959). تم استخدام تدوينه لأول مرة في تقرير ALGOL 60.
BNF هو تدوين لقواعد تشومسكي الخالية من السياق. كان باكوس على دراية بعمل تشومسكي. [11]
كما اقترح باكوس، حددت الصيغة "فئات" تكون أسماؤها محاطة بأقواس زاوية. على سبيل المثال، <ab>. يشير كل من هذه الأسماء إلى فئة من الرموز الأساسية. [2]
أدى المزيد من تطوير ALGOL إلى ALGOL 60. في تقرير اللجنة لعام 1963، أطلق بيتر نور على تدوين باكوس اسم صيغة باكوس الطبيعية . جادل دونالد كنوث بأن BNF يجب قراءته على أنه صيغة باكوس-نور ، لأنه "ليست صيغة طبيعية بالمعنى التقليدي"، [12] على عكس، على سبيل المثال، صيغة تشومسكي الطبيعية . كما تم اقتراح اسم صيغة باكوس بانيني ذات مرة نظرًا لحقيقة أن صيغة باكوس الطبيعية الموسعة قد لا تكون دقيقة، وأن بانيني قد طور بشكل مستقل تدوينًا مشابهًا في وقت سابق. [13]
تم وصف BNF بواسطة بيتر نور في تقرير ALGOL 60 على أنه صيغة ميتا لغوية : [14]
تمثل تسلسلات الأحرف الموجودة بين قوسين <> متغيرات لغوية ميتالانية تكون قيمها عبارة عن تسلسلات من الرموز. العلامات "::=" و"|" (الأخيرة بمعنى "أو") عبارة عن روابط ميتالانية لغوية. أي علامة في صيغة، ليست متغيرًا أو رابطًا، تشير إلى نفسها. يشير تجاور العلامات أو المتغيرات في صيغة إلى تجاور التسلسل المشار إليه.
يوضح مثال آخر من تقرير ALGOL 60 الفرق الرئيسي بين لغة BNF وقواعد تشومسكي الخالية من السياق. لا تتطلب المتغيرات اللغوية قاعدة تحدد تكوينها. يمكن ببساطة وصف تكوينها باللغة الطبيعية بين قوسي <>. يوضح القسم 2.3 من تقرير ALGOL 60 التالي كيفية عمل ذلك:
من أجل تضمين نص بين رموز البرنامج، يجب اتباع اتفاقيات "التعليق" التالية:
تسلسل الرموز الأساسية: يعادل ; تعليق <أي تسلسل لا يحتوي على ';'>; ؛ ابدأ التعليق <أي تسلسل لا يحتوي على ';'>; يبدأ النهاية <أي تسلسل لا يحتوي على 'end' أو ';' أو 'else'> نهاية التكافؤ هنا يعني أن أيًا من الهياكل الثلاثة الموضحة في العمود الأيسر يمكن استبداله، في أي حدوث خارج السلاسل، بالرمز الموضح في نفس السطر في العمود الأيمن دون أي تأثير على عمل البرنامج.
قام نور بتغيير رمزين من رموز باكوس إلى أحرف متاحة بشكل شائع. ::=كان الرمز في الأصل عبارة عن :≡. |كان الرمز في الأصل عبارة عن كلمة " أو " (مع شريط فوقها). [9] : 14
BNF مشابه جدًا لمعادلات الجبر البولياني ذات الشكل التقليدي والتي كانت تُستخدم في تصميم الدوائر المنطقية في ذلك الوقت. كان باكوس عالم رياضيات ومصمم لغة البرمجة فورتران. تعد دراسات الجبر البولياني جزءًا شائعًا من مناهج الرياضيات. لم يصف باكوس ولا نور الأسماء المرفقة بأنها غير نهائية. لم تُستخدم مصطلحات تشومسكي في الأصل في وصف BNF. وصفها نور لاحقًا بأنها فئات في مواد دورة ALGOL. [2] في تقرير ALGOL 60، تم تسميتها بالمتغيرات اللغوية. أي شيء بخلاف الرموز الفوقية و و وأسماء الفئات المرفقة هي رموز للغة التي يتم تعريفها. يجب تفسير الرمز الفوقي على أنه "يُعرَّف بأنه". تُستخدم لفصل التعريفات البديلة ويتم تفسيرها على أنها "أو". الرموز الفوقية هي فواصل تحيط باسم الفئة. تم وصف BNF بأنها لغة ميتافيزيقية للحديث عن ALGOL بواسطة بيتر ناور وسول روزن . [2]< >::=|< >::=|< >
في عام 1947، انخرط ساول روزن في أنشطة جمعية آلات الحوسبة الناشئة ، أولاً في لجنة اللغات التي أصبحت مجموعة IAL والتي أدت في النهاية إلى ALGOL. وكان أول محرر إداري لمجلة Communications of the ACM. [ بحاجة لتوضيح ] تم استخدام BNF لأول مرة كلغة ميتافيزيقية للحديث عن لغة ALGOL في تقرير ALGOL 60. هكذا تم شرحها في مادة دورة برمجة ALGOL التي طورها بيتر ناور في عام 1962. [2] اتبعت أدلة ALGOL المبكرة من IBM وHoneywell وBurroughs وDigital Equipment Corporation تقرير ALGOL 60 باستخدامها كلغة ميتافيزيقية. يصف ساول روزن في كتابه [15] BNF كلغة ميتافيزيقية للحديث عن ALGOL. ومن الأمثلة على استخدامها كلغة ميتافيزيقية في تعريف تعبير حسابي:
<expr> :: = <term> | <expr> > <addop> > <term>
قد يكون الرمز الأول للبديل هو الفئة التي يتم تعريفها، والتكرار، كما أوضح نور، له وظيفة تحديد أن التسلسل البديل يمكن أن يبدأ بشكل متكرر ببديل سابق ويمكن تكراره أي عدد من المرات. [2] على سبيل المثال، <expr>يتم تعريف ما سبق على أنه <term>متبوع بأي عدد من <addop> <term>.
في بعض اللغات الحديثة، مثل لغة META II لـ Schorre ، تم استبدال بنية التكرار التكراري BNF بمشغل تسلسل ورموز لغة الهدف المحددة باستخدام سلاسل مقتبسة. تمت إزالة الأقواس <و . تمت إضافة أقواس للتجميع الرياضي. ستظهر القاعدة في META II على النحو التالي
>()<expr>
EXPR = TERM $ ( '+' TERM . OUT (' إضافة ') | '-' TERM . OUT (' فرعي '));
مكنت هذه التغييرات لغة البرمجة META II ولغات البرمجة المشتقة منها من تعريف وتوسيع لغتها الخاصة، على حساب القدرة على استخدام وصف اللغة الطبيعية، والمتغيرات اللغوية، ووصف بناء اللغة. وقد استوحيت العديد من اللغات الفرعية من لغة البرمجة BNF. [ بحاجة لمصدر ] انظر META II و TREE-META و Metacompiler .
تصف فئة BNF تكوين بنية لغوية، مع تعريف التكوين كنمط أو إجراء تكوين النمط. يتم وصف اسم الفئة expr في لغة طبيعية على أنه <term>يتبعه تسلسل <addop> <term>. الفئة عبارة عن تجريد؛ يمكننا التحدث عنها بشكل مستقل عن تكوينها. يمكننا التحدث عن المصطلح، بغض النظر عن تعريفه، على أنه مضاف أو مطروح في expr. يمكننا التحدث عن المصطلح باعتباره نوعًا محددًا من البيانات وكيف يتم تقييم expr باستخدام مجموعات محددة من أنواع البيانات، أو حتى إعادة ترتيب تعبير لتجميع أنواع البيانات ونتائج التقييم للأنواع المختلطة. قدم الملحق الخاص باللغة الطبيعية تفاصيل محددة عن دلالات فئة اللغة التي سيتم استخدامها بواسطة تنفيذ المترجم والمبرمج الذي يكتب برنامج ALGOL. كما استكمل وصف اللغة الطبيعية بناء الجملة أيضًا. تعد قاعدة الأعداد الصحيحة مثالاً جيدًا للغة الطبيعية واللغة المعدنية المستخدمة لوصف بناء الجملة:
< عدد صحيح > ::= < رقم > | < عدد صحيح >< رقم >
لا توجد تفاصيل محددة بشأن المساحة البيضاء في ما سبق. وبقدر ما تنص القاعدة، يمكننا أن نضع مسافة بين الأرقام. وفي اللغة الطبيعية، نكمل لغة BNF المعدنية من خلال توضيح أن تسلسل الأرقام لا يمكن أن يحتوي على مساحة بيضاء بين الأرقام. واللغة الإنجليزية هي واحدة فقط من اللغات الطبيعية الممكنة. وكانت ترجمات تقارير ALGOL متاحة بالعديد من اللغات الطبيعية.
إن أصل BNF ليس بنفس أهمية تأثيره على تطوير لغات البرمجة. [ بحاجة لمصدر ] خلال الفترة التي أعقبت مباشرة نشر تقرير ALGOL 60، كان BNF هو الأساس للعديد من أنظمة المترجم-المترجم .
بعضها، مثل "مترجم موجه نحو بناء الجملة لـ ALGOL 60" الذي طوره إدغار ت. آيرونز و"نظام بناء المترجم" الذي طوره بروكر وموريس، استخدم BNF بشكل مباشر. والبعض الآخر، مثل مترجمات Schorre Metacompilers، حولته إلى لغة برمجة مع القليل من التغييرات فقط. <class name>أصبحت معرفات رمزية، وأسقطت المغلفة <، >واستخدمت سلاسل مقتبسة لرموز اللغة المستهدفة. قدم التجميع الشبيه بالحسابات تبسيطًا أزال استخدام الفئات حيث كان التجميع هو قيمته الوحيدة. تُظهر قاعدة التعبير الحسابي META II استخدام التجميع. تُستخدم تعبيرات الإخراج الموضوعة في قاعدة META II لإخراج التعليمات البرمجية والعلامات في لغة التجميع. القواعد في META II تعادل تعريفات الفئة في BNF. تعتمد أداة يونكس yacc على BNF مع إنتاج كود مشابه لـ META II. يستخدم yacc بشكل شائع كمولد محلل ، ومن الواضح أن جذوره هي BNF.
تعتبر لغة البرمجة BNF اليوم واحدة من أقدم لغات البرمجة المرتبطة بالكمبيوتر والتي لا تزال قيد الاستخدام. [ بحاجة لمصدر ]
أمثلة أخرى

من الممكن تمثيل بناء جملة BNF نفسه باستخدام BNF مثل ما يلي:
<syntax> :: = <base> | <base> <syntax> <base> :: = <opt-whitespace> " < " <base-name> " > " <opt-whitespace> " :: = " <opt-whitespace> <pression> <line-end> <opt-whitespace> :: = " " <opt-whitespace> | "
" <pression> :: = <list> | <list> <opt-whitespace> " | " <opt-whitespace> <pression> <line-end> :: = <opt-whitespace> <EOL> | <line-end> <line-end> <list> :: = <term> | <term> <opt-whitespace> <list> <term> :: = <literal> | " < " <base-name> " > " <literal> :: = ' " ' <text1> ' " ' | " ' " <text2> " ' " <text1> :: = " " | <character1> <text1> <text2> :: = " " |
< حرف2 > < نص2 > < حرف > ::= < حرف > | < رقم > | < رمز > < حرف > ::=
"أ" | "ب" | "ج" | "د" | "هـ" | "و" | "ز" | "ح" | "ط" | "ي" | "ك" | "ل" | "م" | "ن" | "و" | "ص" | "ق" | "ر" | "س" | "ت" | "و" | "ف" | "و" | "س" | "س" | "ط" | "أ" | "ب" | "ج" | "د" | "هـ" | "و" | "س" | "ز" | "أ" | "ب" | "ج" | "د" | "هـ" | "و" | "ز" | "ح" | "ط" | "ي" | "ك" | "ل" | "م" | "ن" | "و" | "ص" | "ز" | "أ" | "ب" | "ج" | "د" | "هـ" | "و" | "ز" | "ح" | "ط" | "ي" | "ك" | "ل" | "م" | "ن" | "و" | "ص" | "ز"
< رقم > ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
< رمز > ::= "|" | " " | "!" | "#" | "$" | "%" | "&" | "(" | ")" | "*" | "+" | ""," | "-" | "." | "/" | ":" | ";" | ">" | "=" | "<" | "?" | "@" | "[" | "\" | "]" | "^" | "_" | "`" | "{" | "}" | "~"
< حرف1 > ::= < حرف > | "'"
< حرف2 > ::= < حرف > | '"'
< اسم القاعدة > ::= < حرف > | < اسم القاعدة > <حرف القاعدة > < حرف القاعدة > :: = < حرف > | < رقم > | "-"
لاحظ أن "" هي السلسلة الفارغة .
لم يستخدم BNF الأصلي علامات الاقتباس كما هو موضح في <literal>القاعدة. وهذا يفترض عدم الحاجة إلى وجود مسافات بيضاء للتفسير الصحيح للقاعدة.
<EOL>يمثل مواصفات نهاية السطر المناسبة (في ASCII ، أو إرجاع العربة، أو تغذية السطر، أو كليهما حسب نظام التشغيل ). <rule-name>ويجب <text>استبدالها باسم/تسمية القاعدة المعلنة أو النص الحرفي، على التوالي.
في مثال عنوان البريد الأمريكي أعلاه، فإن علامة الاقتباس الكاملة هي <syntax>. كل سطر أو مجموعة متواصلة من الأسطر هي قاعدة؛ على سبيل المثال، تبدأ إحدى القواعد بـ <name-part> ::=. والجزء الآخر من هذه القاعدة (بخلاف نهاية السطر) هو تعبير يتكون من قائمتين مفصولتين بشريط عمودي |. تتكون هاتان القائمتان من بعض المصطلحات (ثلاثة مصطلحات ومصطلحان على التوالي). كل مصطلح في هذه القاعدة المعينة هو اسم قاعدة.
المتغيرات
إي بي إن إف
هناك العديد من المتغيرات والامتدادات لـ BNF، وعادةً ما تكون من أجل البساطة والإيجاز، أو لتكييفها مع تطبيق معين. إحدى السمات المشتركة للعديد من المتغيرات هي استخدام مشغلات تكرار التعابير العادية مثل *و +. يعد نموذج Backus–Naur الموسع (EBNF) أحد النماذج الشائعة.
هناك امتداد شائع آخر وهو استخدام الأقواس المربعة حول العناصر الاختيارية. ورغم عدم وجودها في تقرير ALGOL 60 الأصلي (بدلاً من ذلك تم تقديمها بعد بضع سنوات في تعريف PL/I الخاص بشركة IBM )، فإن هذا الترميز أصبح الآن معترفًا به عالميًا.
أبنف
نموذج باكوس ناور المعزز (ABNF) ونموذج باكوس ناور للتوجيه (RBNF) [16] عبارة عن امتدادات تستخدم عادةً لوصف بروتوكولات فريق مهام هندسة الإنترنت (IETF) .
تعتمد قواعد التعبير التحليلي على تدوينات BNF والتعابير العادية لتشكيل فئة بديلة من القواعد الرسمية ، والتي هي في الأساس تحليلية وليست توليدية في طبيعتها.
آحرون
العديد من مواصفات BNF الموجودة على الإنترنت اليوم تهدف إلى أن تكون قابلة للقراءة من قبل البشر وليست رسمية. غالبًا ما تتضمن العديد من قواعد بناء الجملة والإضافات التالية:
- العناصر الاختيارية الموضوعة بين قوسين مربعين:
[<item-x>]. - يتم وضع العناصر الموجودة 0 مرة أو أكثر بين قوسين متعرجين أو إضافة علامة النجمة (
*) إليها مثل<word> ::= <letter> {<letter>}أو<word> ::= <letter> <letter>*على التوالي. - يتم إضافة رمز الإضافة (زائد) إلى العناصر الموجودة مرة واحدة أو أكثر
+، مثل<word> ::= <letter>+. - يمكن أن تظهر المحطات الطرفية بخط عريض بدلاً من الخط المائل، ويمكن أن تظهر المحطات الطرفية بنص عادي بدلاً من الأقواس الزاوية.
- عندما يتم تجميع العناصر، يتم وضعها بين قوسين بسيطين.
البرامج التي تستخدم BNF أو المتغيرات
برنامج يقبل BNF (أو مجموعة فرعية) كمدخل
- ANTLR ، مولد محلل مكتوب بلغة Java
- Coco/R ، مولد المترجم الذي يقبل قواعد النحو المنسوبة في EBNF
- مجموعة أدوات إعادة هندسة البرمجيات DMS ، نظام تحليل وتحويل البرامج للغات عشوائية
- GOLD ، مولد محلل BNF
- محلل RPA BNF. [17] تحليل تجريبي عبر الإنترنت (PHP): JavaScript، XML
- نظام XACT X4MR، [18] وهو نظام خبير قائم على القواعد لترجمة لغة البرمجة
- محلل XPL ، أداة تقبل BNF مبسطة للغة وتنتج محللًا لتلك اللغة في XPL؛ يمكن دمجها في برنامج SKELETON المقدم، والذي يمكن من خلاله تصحيح أخطاء اللغة [19] ( برنامج ساهم به SHARE ، والذي سبقه مولد المترجم [20] )
- bnfparser 2 ، [21] أداة التحقق من بناء الجملة العالمية
- bnf2xml، [22] إدخال العلامات باستخدام علامات XML باستخدام مطابقة BNF المتقدمة
- JavaCC ، [23] Java Compiler Compiler tm (JavaCC tm) - مولد محلل Java
برامج مشابهة
- GNU bison ، نسخة GNU من yacc
- Yacc ، مولد المحلل (يستخدم عادة مع معالج Lex المسبق)
- أدوات التحليل في Racket، التحليل بأسلوب lex وyacc (إصدار Racket الجميل)
- تستخدم أداة Qlik Sense، وهي أداة ذكاء الأعمال، أحد أشكال BNF للبرمجة النصية [24]
- محول BNF (BNFC [25] )، يعمل على متغير يسمى "نموذج Backus–Naur المُسمى" (LBNF). في هذا المتغير، يتم إعطاء تسمية لكل إنتاج لطرف غير نهائي معين، والذي يمكن استخدامه كمنشئ لنوع بيانات جبري يمثل هذا الطرف غير النهائي. المحول قادر على إنتاج أنواع ومحللات للنحو المجرد بعدة لغات، بما في ذلك Haskell وJava
انظر أيضا
- شكل باكوس ناور المعزز (ABNF)
- لغة وصف المترجم (CDL)
- قواعد الجملة المحددة – بديل أكثر تعبيرًا لـ BNF المستخدم في Prolog
- شكل باكوس ناور الممتد (EBNF)
- Meta-II – أداة كتابة وتدوين مبكرة للمترجم
- مخطط بناء الجملة – مخطط السكك الحديدية
- صيغة باكوس ناور الترجمية (TBNF)
- قواعد Van Wijngaarden - تُستخدم بدلاً من BNF لتعريف Algol68
- تدوين بناء الجملة Wirth – بديل لـ BNF من عام 1977
مراجع
- ^ abc Janikow, Cezary Z. "ما هو BNF؟" (PDF) .
- ^ abcdefg يمكن تفسير معنى الصيغة النحوية بشكل أكبر بالقول إن الكلمات الموجودة بين قوسين
< >، مثل<ab>، تشير إلى فئات أعضاؤها عبارة عن تسلسلات من الرموز الأساسية. توجد تسميات الفئات من هذا النوع في أي وصف للغة. لوصف اللغات الطبيعية العادية، تُستخدم تسميات مثل الكلمة والفعل والاسم. [8] : 5، ملاحظة 1 - ^ هذه المقالة مبنية على مادة مأخوذة من Backus-Naur+Form في القاموس المجاني للحوسبة على الإنترنت قبل 1 نوفمبر 2008 وتم دمجها بموجب شروط "إعادة الترخيص" الخاصة بـ GFDL ، الإصدار 1.3 أو الأحدث.
- ^ "سيرة بانيني". كلية الرياضيات والإحصاء، جامعة سانت أندروز، اسكتلندا . تم استرجاعه في 2014-03-22 .
- ^ إنجيرمان، بيتر زيلاهي (مارس 1967). "نموذج بانيني-باكوس المقترح". اتصالات رابطة آلات الحوسبة . 10 (3). رابطة آلات الحوسبة: 137. doi : 10.1145/363162.363165 . S2CID 52817672.يقترح إنجيرمان إعادة تسمية نموذج باكوس الطبيعي إلى نموذج بانيني - باكوس، لإعطاء الفضل المستحق لبانيني باعتباره أول مخترع مستقل.
- ^ تشومسكي، نعوم (1956). "ثلاثة نماذج لوصف اللغة" (PDF) . معاملات معهد البحوث الاقتصادية في نظرية المعلومات . 2 (3): 113-24. doi :10.1109/TIT.1956.1056813. S2CID 19519474. مؤرشف من الأصل (PDF) في 2010-09-19.
- ^ تشومسكي، نعوم (1957). البنى النحوية . لاهاي: موتون.
- ^ ناور، بيتر (1961). "دورة برمجة الخوارزمية L60 مع إشارة خاصة إلى نظام DASK ALGOL" (PDF) . كوبنهاجن: Regnecentralen . تم الاسترجاع في 26 مارس 2015 .
- ^ ab Backus, JW (1959). "قواعد اللغة والدلالات للغة الجبرية الدولية المقترحة لمؤتمر زيورخ ACM-GAMM". وقائع المؤتمر الدولي لمعالجة المعلومات . اليونسكو. ص 125-132.
- ^ Farrell, James A. (August 1995). "أساسيات المترجم: نموذج باكوس نور الممتد". مؤرشف من الأصل في 5 يونيو 2011. تم الاسترجاع في 11 مايو 2011 .
- ^ فولتون، الثالث، سكوت م. (20 مارس 2007). "جون دبليو باكوس (1924 - 2007)". بيتا نيوز . تم الاسترجاع في 3 يونيو 2014 .
- ^ Knuth, Donald E. (1964). "Backus Normal Form vs. Backus Naur Form". Communications of the ACM . 7 (12): 735–736. doi : 10.1145/355588.365140 . S2CID 47537431.
- ^ إنجرمان ، بي زد (1967). ““نموذج بانيني باكوس “مقترح”. اتصالات ACM . 10 (3): 137. دوى : 10.1145/363162.363165 . S2CID 52817672.
- ^ القسم 1.1 من تقرير ALGOL 60 المنقح. "ALGOL 60" . تم استرجاعه في 18 أبريل 2015 .
- ^ Saul Rosen (يناير 1967). أنظمة البرمجة واللغات . سلسلة علوم الكمبيوتر McGraw Hill. نيويورك/نيويورك: McGraw Hill. ISBN 978-0070537088.
- ^ RBNF.
- ^ "عرض توضيحي عبر الإنترنت"، RPatk، تم أرشفته من الأصل في 2012-11-02 ، تم استرجاعه في 2011-07-03
- ^ "أدوات"، عالم الأفعال، مؤرشف من الأصل في 2013-01-29
- ^ إذا كان المعالج المستهدف هو System/360، أو ذي صلة، حتى z/System، وكانت اللغة المستهدفة مشابهة لـ PL/I (أو XPL بالفعل)، فيمكن تكييف "مُصدرات" الكود المطلوبة من "مُصدرات" XPL لـ System/360.
- ^ McKeeman, WM; Horning, JJ; Wortman, DB (1970). مولد المترجم . برنتيس هول. ISBN 978-0-13-155077-3.
- ^ "BNF parser²"، Source forge (مشروع)
- ^ bnf2xml
- ^ "JavaCC". مؤرشف من الأصل في 2013-06-08 . تم الاسترجاع 2013-09-25 .
- ^ "Script Syntax - Qlik Sense on Windows". Qlik.com . QlikTech International AB . تم الاسترجاع في 10 يناير 2022 .
- ^ "BNFC"، تكنولوجيا اللغة، SE : تشالمرز
روابط خارجية
- جارشول، لارس ماريوس، BNF و EBNF: ما هما وكيف يعملان؟، لا : خاص.
- RFC 5234 — BNF المعزز لمواصفات بناء الجملة: ABNF.
- RFC 5511 — توجيه BNF: صيغة بناء الجملة المستخدمة في مواصفات البروتوكول المختلفة.
- ISO/IEC 14977:1996(E) تكنولوجيا المعلومات – لغة تركيبية معدنية – BNF ممتدة ، متوفرة من "متاحة للعامة"، المعايير، ISOأو من Kuhn, Marcus, Iso 14977 (PDF) ، المملكة المتحدة : CAM (الأخير يفتقر إلى صفحة الغلاف، لكنه أنظف بكثير)
قواعد اللغة
- بيرنهارد، ألغول-60 بي إن إف، دي : LRZ ميونيخ، BNF الأصلي.
- "قواعد BNF لـ SQL-92 وSQL-99 وSQL-2003"، Savage، AU : Net، قواعد BNF متاحة مجانًا لـ SQL .
- "BNF Web Club"، بحث قاعدة البيانات، CH : Unige، تم أرشفته من الأصل في 2007-01-24 ، تم استرجاعه في 2007-01-25قواعد BNF متاحة مجانًا لـ SQL و Ada و Java .
- "قواعد لغة البرمجة المجانية لبناء المترجم"، الكود المصدري، البلد الحرقواعد BNF/ EBNF متاحة مجانًا للغات C/C++، و Pascal ، وCOBOL ، و Ada 95 ، و PL/I .
- "ملفات BNF المتعلقة بمعيار STEP"، محرك Exp ( SVN )، Source forge، مؤرشفة من الأصل في 2012-12-25. يتضمن الأجزاء 11 و14 و21 من معيار ISO 10303 (STEP).
