صيغة باكوس نور
صيغة باكوس نور
في علوم الحاسب الآلي،) BNF (صيغة باكوس العادية أو صيغة باكوس نور(هو أسلوب تدوين لقواعد السياق الحر، وكثيرا ما تستخدم لوصف تكوين الجملة من اللغات المستخدمة في الكمبيوتر، مثل لغات البرمجة للكمبيوتر، وأشكال الوثيقة، ومجموعات التعليمات وبروتوكولات الاتصال.. ويطبق في الحالات التي تحتاج إلى وصف دقيق للغة، على سبيل المثال، في مواصفات اللغة الرسمية، في الكتيبات، وفى كتب دراسة نظرية لغة البرمجة. وتستخدم العديد من الملحقات والمتغيرات من التدوين الأصلي ؛ البعض يتم تعريفها حرفيا، بما فيها صيغة باكوس نور المطولة (EBNF) صيغة باكوس نور المضافة (ABNF).
التاريخ
فكرة شرح بناء اللغة بإعادة كتابة القواعد يمكن إرجاعها إلى عمل بانيني على الاقل (حوالي القرن 4 ق م)، الذي يستخدمه في وصف بناء الكلمة السنسكريتية—وبالتالي، يقترح البعض لإعادة تسمية BNF لصيغة باكوس بانيني [١] اللغويين الأمريكان مثل ليونارد بلومفيلد وزيليج هاريس أخذت هذه الفكرة خطوة أخرى إلى الأمام من خلال محاولة إضفاء الطابع الرسمي على اللغة ودراستها بمصطلحات وخطوات رسمية أساسية (حوالي 1920-1960) وفي الوقت نفسه، إعادة كتابة القواعد مسلسلة بشكل رسمى، ونظم مجردة قد تم تقديمها ودراستها من قبل علماء الرياضيات مثل أكسل أثيو (في 1914)، واميل بوست في(1920s - 1940s) وألان تورينج (1936 (نعوم تشومسكي، تدريس اللغويات لطلاب نظرية المعلومات في معهد ماساتشوستس للتكنولوجيا (MIT)، تجمع بين علم اللغة والرياضيات، من خلال اخذ ما هو أساسي من شكليات ثيو كأساس لوصف بناء الجملة في اللغة الطبيعية، وقدم أيضا تمييزا واضحا بين القواعد التوليدية (تلك من قواعد السياق الحر) وقواعد التحول (1956) [٢][٣]
[٤] اعتمد جون باكوس، وهو مصمم لغة برمجة في آي بي إم، على قواعد تشومسكي التوليدية لوصف بناء الجملة للغة البرمجة الجديدة IAL، المعروفة اليوم باسم[٥] 58 ALGOL(1959) ،باستخدام تدوين BNF. أدت زيادة تطوير ALGOLإلى60 ALGOL ؛ في تقريرها عام (1963)، بيتر نور اطلق اسمه صيغة باكوس العادية على تدوين باكوس، وقام بتبسيطها لتقليل مجموعة الأحرف المستخدمة. ومع ذلك، دونالد كنوث جادل في هذا وقال ان BNF ينبغى ان تقرأ كصيغة باكوس نور، لأنها "ليست صيغة عادية بأي معنى"، [6] وخلافا، على سبيل المثال، صيغة تشومسكي العادية.
مقدمة
مواصفات BNF هي مجموعة من قواعد الاشتقاق، تكتب بهذا الشكل
<symbol>: : = __expression__
حيث أن <symbol>الرمز ليس له نهاية، و__expression__ المصطلح يتكون من واحد أو أكثر من تسلسل الرموز ؛ يتم فصل أكثر المتسلسلات بواسطة شريط عمودي، '|'، مما يشير إلى إمكانية الاختيار، وكلها تجري استبدالات ممكنة للرمز على اليسار. الرموز التي لا تظهر على الجانب الأيسر تعتبر نهاية طرفية. ومن ناحية أخرى، الرموز التي تظهر على الجانب الأيسر ليس لها نهاية طرفية ومحاطة دائما بين <>
المثال
فعلى سبيل المثال، النظر في الاحتمال BNF الممكنة لعناوين البريد في الولايات المتحدة : <postal-address> ::= <name-part> <street-address> <zip-part>
<name-part> ::= <personal-part> <last-name> <opt-jr-part> <EOL> | <personal-part> <name-part> <EOL> <personal-part> ::= <first-name> | <initial> "." <street-address> ::= <house-num> <street-name> <opt-apt-num> <EOL> <zip-part> ::= <town-name> "," <state-code> <ZIP-code> <EOL> <opt-jr-part> ::= "Sr." | "Jr." | <roman-numeral> | ""
وهذا يترجم إلى اللغة الإنكليزية على النحو التالي : • عنوان بريدي يتكون من جزء- اسم، يليه جزء-عنوان الشارع، يليه جزء-الرقم البريدي. • جزء-الاسم يتكون من إما : جزء- شخصي يليه اسم العائلة متبوعا باختيارملحق (الابن، الأب، أو عدد سلالي) ونهاية الخط، أو الجزء الشخصي يليه جزء الاسم (هذه القاعدة توضح استخدام الاستدعاء الذاتى في BNFs، الذي يغطي حالة الأشخاص الذين يستخدمون الأسماء الأولى والمتوسطة المتعددة و/ أو الأحرف الأولية). • الجزء-الشخصي يتكون من إما الاسم الاول أو احرف أولية تليها نقطة. • عنوان الشارع يتكون من رقم المنزل، يليه اسم الشارع، يعقبه اختيارالشقة المحددة، يعقبه نهاية السطر. • جزء-الرمز البريدي، يتكون من اسم بلدة، تليها فاصلة، متبوعا برمز الدولة، يليه الرقم البريدي يعقبه نهاية سطر واحد. • جزء (opt-jr-)، يتكون من لاحقة، مثل "Sr." الاب ،”Jr.” ألابن أو الأرقام -الرومانية، أو سلسلة فارغة (أي شيء.) لاحظ أنه يتم ترك أشياء كثيرة غير محددة هنا (مثل تنسيق الاسم الأول، محدد الشقة، الرمز البريدي، وألارقام الرومانية) هنا غير. إذا لزم الأمر، قد يمكن وصفها باستدام قواعد BNF إضافية.
مزيد من الأمثلة
بناء جملة بصيغة BNF قد تمثل ذاتها ب BNF كما يلي : <syntax> ::= <rule> | <rule> <syntax>
<rule> ::= <opt-whitespace> "<" <rule-name> ">" <opt-whitespace> "::=" <opt-whitespace> <expression> <line-end> <opt-whitespace> ::= " " <opt-whitespace> | "" <expression> ::= <list> | <list> "|" <expression> <line-end> ::= <opt-whitespace> <EOL> | <line-end> <line-end> <list> ::= <term> | <term> <opt-whitespace> <list> <term> ::= <literal> | "<" <rule-name> ">" <literal> ::= '"' <text> '"' | "'" <text> "'"
هذا يفترض أن المساحة البيضاء غير ضرورية للتفسير الصحيح للقاعدة. <EOL>يمثل محدد نهاية الخط المناسب (في ASCII، تحريك الحاملة و/ أو عدد السطور، اعتمادا على نظام التشغيل. <rule-name>و <text> موجودان ليكونا بديلا مع اسم/ التسمية أو النص الحرفي للقاعدة المعلنة، على التوالي. في الولايات المتحدة مثلا عنوان البريدي أعلاه، الكتلة الكاملة المحصورة بين القوسين هى بناء الجملة. كل خط أو خطوط تجميعية غير منقطعة تعتبر قاعدة، على سبيل المثال قاعدة واحدة تبدأ بـ "<name-part>::=". الجزء الآخر من هذه القاعدة (وبصرف النظر عن نهاية سطر) هو مصطلح، والذي يتكون من قائمتين مفصولتان بأنبوب "|". هاتين القائمتين تتكونا من بعض المصطلحات (ثلاثة مصطلحات ومصطلحين، على التوالي). كل مصطلح في هذه القاعدة المحدة هو اسم قاعدة.
المتغيرات
هناك العديد من المتغيرات والملحقات لصيغة BNF، عموما إما من أجل التبسيط والايجاز، أو لتكييفه مع تطبيق معين. هناك سمة مشتركة واحدة بين العديد من المتغيرات هو استخدام مشغلي تكرار المصطلح العادي مثل * و+. صيغة باكوس نور المطولة (EBNF) هى صيغة مشتركة. في الواقع المثال أعلاه هو ليس صيغة محضة مخترعة لتقرير 60ALGOL وكان تدوين قوس "[]" تم عرضه في سنوات قليلة لاحقة في لغة بى ال وان لآي بي إم ولكن الان معترف بها عالميا. ABNF و RBNF والملحقات الأخرى تستخدم عادة لوصف بروتوكولات فرقة هندسة الإنترنت (IETF).
قواعد تحليل المصطلح تبنى على ال BNF وترميزات المصطلحات العادية لتكوين فئة بديلة من القواعد الأساسية، والتي هي أساسا تحليلياً بدلا من التوليد الحرفى.
العديد من مواصفات BNF موجودة على الانترنت اليوم والمراد ان تكون سهلة القراءة للبشر وغير نظامية. وغالبا ما تشمل العديد من قواعد بناء الجملة التالية والملحقات : • العناصر الاختيارية متضمنة بين قوسين معقوفين. على سبيل المثال [<item-x>] • العناصر تتكرر 0 مرة او أكثرة متضمنة بين أقواس متعرجة أو تتبعها علامة النجمة على سبيل المثال <word> ::= <letter> {<letter>} • العناصر التى تتكررمرة أو أكثر تتبعها '+' • النهايات الطرفية تظهر بنص عريض والتى لا تعتبر نهاية طرفية تظهر بنص عادي بدلا من استخدام النص المائل وأقواس زاوية • الخيارات البديلة في الانتاج منفصلة بالرمز ‘|’ على سبيل المثال، <alternative-A> | <alternative-B> • عندما تحتاج البنود إلى التجميع تحاط بين قوسين بسيطين
انظر أيضا
- Extended Backus–Naur Form.
- Syntax diagram (Railroad diagram).
- Definite clause grammar A more expressive alternative to BNF used in Prolog
- Wirth syntax notation An alternative to BNF from 1977.
- Pseudocode A similar concept
برمجيات باستخدامBNF
- ANTLR Another parser generator written in Java.
- BNF Converter (BNFC) (BNFC).
- Coco/R Compiler generator accepting an attributed grammar in EBNF
- GOLD BNF parser.
- GNU bison GNU version of yacc.
- RPA BNF parser. Online(PHP) demo parsing: JavaScript, XML
- Yacc parser generator (used with Lex pre-processor).
المراجع
تستند هذة المقالة على مواد من قاموس الحوسبة المجاني على الانترنت، وهو ترخيص تحت رخصة جنو للوثائق الحرة.
- ^ Letter to ACM Commumications by P.Z. Ingerman (1967) quoted in Rao، T.R.N. (1998). The Panini-Backus Form in Syntax of Formal Languages. Retrieved 04/23/2011.
- ^ Chomsky, Noam (1956). "Three models for the description of language". IRE Transactions on Information Theory 2 (2): 113–124. doi: .
- ^ Chomsky, Noam (1957). Syntactic Structures. The Hague: Mouton.
- ^ Fulton، Scott M., III (2007-03-20). betanews. Retrieved August 14, 2010.
- ^ Backus, J.W. (1959). "Proceedings of the International Conference on Information Processing": 125–132. UNESCO.
وصلات خارجية
- Backus Normal Form vs. Backus-Naur Form explains some of the history of the two names.
- BNF and EBNF: What are they and how do they work? by Lars Marius Garshol.
- RFC 4234 Augmented BNF for Syntax Specifications: ABNF.
- RFC 5511 Routing BNF: A Syntax Used in Various Protocol Specifications.
- Comparison of different variants of BNF
- Syntax diagram of EBNF
- Generation of syntax diagrams from EBNF
- ISO/IEC 14977:1996(E) Information technology - Syntactic metalanguage - Extended BNF, available from ISO or from Marcus Kuhn (the latter is missing the cover page, but is otherwise much cleaner)
نحو اللغة
- Algol-60 BNF, the original BNF.
- BNF grammars for SQL-92, SQL-99 and SQL-2003, Freely available BNF grammars for SQL.
- BNF Web Club, Freely available BNF grammars for SQL, Ada, Java.
- BNF Examples and Full Programming Languages, Freely available BNF grammars for programming languages (C, Java, JavaScript, C#, VB.NET, SQL-89), academic languages, file formats (HTML, XML, CSS) and others (regular expressions, YACC). These are written in the GOLD Meta-Language, consisting of BNF and Regular Expressions.
- Free Programming Language Grammars for Compiler Construction, Freely available BNF/EBNF grammars for C/C++, Pascal, COBOL, Ada 95, PL/I.
ca:Forma de Backus i Naur
cs:Backusova-Naurova forma
da:Backus-Naur form
de:Backus-Naur-Form
el:Μορφή Μπάκους-Νάουρ
Backus–Naur Form]]
es:Notación de Backus-Naur
fi:Backus–Naur-muoto
fr:Forme de Backus-Naur
gl:Backus-Naur Form
hi:बाक्कस-नार प्रारूप
hr:Backus-Naurov oblik
hu:Backus–Naur forma
is:BNF
it:Backus-Naur Form
ja:バッカス・ナウア記法
ka:ბეკუს-ნაურის ფორმალიზმი
ko:바쿠스-나우르 표기법
ms:Bentuk Backus–Naur
nl:Backus-Naur-vorm
no:Backus-Naur form
pl:Notacja BNF
pt:Formalismo de Backus-Naur
ru:Форма Бэкуса — Наура
sr:Бекус-Наурова форма
sv:Backus-Naur-form
ta:பேக்கசு-நார் முறை
tr:Backus-Naur form
uk:Нотація Бекуса-Наура
zh:巴科斯范式