شرح صيغة باكوس نور.. bnf
مساعده في صيغة باكوس نور..
لم أفهم ولا كلمة !
اكتبي ما تريدينه في Google وسيجيبك عن سؤالك
إقرئي المقالة التى تتحدث عن Backus–Naur Form من Wikipedia و ما لا تفهمينه اسئلي عنه و سيشرح لك إن شاء الله.
و الله ولي التوفيق
مدونتي: C++ Tips and Tricks
هذي الجزئيه ماني فاهمتها في ملزمة syntax and semantics
Grammars and derivations
- The sentences of the language are generated through a sequence of applications of the rules, beginning with a special nonterminal of the grammar called the start symbol.
- A derivation is a repeated application of rules, starting with the start symbol and ending with a sentence (all terminal symbols)
- An example grammar:
<program> ® <stmts>
<stmts> ® <stmt> | <stmt> ; <stmts>
<stmt> ® <var> = <expr>
<var> ® a | b | c | d
<expr> ® <term> + <term> | <term> - <term>
<term> ® <var> | const
- An example derivation:
<program> => <stmts> => <stmt>
=> <var> = <expr> => a = <expr>
=> a = <term> + <term>
=> a = <var> + <term>
=> a = b + <term>
=> a = b + const
- Every string of symbols in the derivation, including <program>, is a sentential form.
- A sentence is a sentential form that has only terminal symbols.
- A leftmost derivation is one in which the leftmost nonterminal in each sentential form is the one that is expanded. The derivation continues until the sentential form contains no nonterminals.
A derivation may be neither leftmost nor rightmost
قاعدة الـbnf مثل قواعد اللغة العربية
الكلام: جملة فأكثر
الجملة: اسمية أو فعلية
اسمية: مبتدأ خبر
المبتدأ: كلمة
الخبر: مفرد أو جملة
... إلخ
قواعد اللغة العربية كثيرة وأشد تعقيد. لكن الملاحظ أن القواعد تتشعب.
الآن إذا أردت أن تتأكدين من أن الكلام سليم تمريرين جمل على هذه القواعد وإذا نجحت فهي سليمة (اشتقاق derivation).
لمعرفة أن الجملة a = b + const موافقة للقواعد:
<program> -> <stmts> <stmts> -> <stmt> | <stmt> ; <stmts> <stmt> -> <var> = <expr> <var> -> a | b | c | d <expr> -> <term> + <term> | <term> - <term> <term> -> <var> | const
تبدأين مع المدخل program، لاتوجد به إلا stmts، نأخذها:
<program> => <stmts>
الآن نرى stmts، هناك خيارين، الثاني <stmt> ; <stmts> غير مناسب لأن الجملة لدينا لايوجد فيها ;، نأخذ الأولى stmt:
<program> => <stmts>
=> <stmt>الآن نرى stmt، في جملتنا علامة =، حتى الآن الجملة سليمة:
<program> => <stmts>
=> <stmt>
=> <var> = <expr>الآن هناك خيارين، أن نشتق var (اشتقاق من اليسار left derivation) أو expr، (اشتقاق من اليمين right derivation)، كلهم يعطون نفس النتيجة، سأختار اليسار var، في var هناك خيارات a,b,c,d ولدينا a. حتى الآن الجملة سليمة:
<program> => <stmts>
=> <stmt>
=> <var> = <expr>
=> a = <expr>أنهينا من في اليسار ننتفل لأول non-terminal على اليمين expr، هناك خيارين المناسب <term> + <term> لوجود علامة + لدينا:
<program> => <stmts>
=> <stmt>
=> <var> = <expr>
=> a = <expr>
=> a = <term> + <term>نبدأ باليسار term، هناك خيارين <var> أو const الثاني غير مناسب نأخذ الأول <var>:
<program> => <stmts>
=> <stmt>
=> <var> = <expr>
=> a = <expr>
=> a = <term> + <term>
=> a = <var> + <term>من var لدينا b، أنهينا هذا الجزء وننتقل للثاني:
<program> => <stmts>
=> <stmt>
=> <var> = <expr>
=> a = <expr>
=> a = <term> + <term>
=> a = <var> + <term>
=> a = b + <term>الآن نعمل على <term> هنا const و <var>، ولدينا في الجملة const نأخذها:
<program> => <stmts>
=> <stmt>
=> <var> = <expr>
=> a = <expr>
=> a = <term> + <term>
=> a = <var> + <term>
=> a = b + <term>
=> a = b + constانتهينا. الجملة سليمة وفق تلك القواعد.
الله يسعدك دنبا واخره..
هذا الموضوع مغلق.