تدوين بناء الجملة لـ Wirth

تدوين ويرث النحوي ( WSN ) هو بناء نحوي فوقي ، أي طريقة رسمية لوصف اللغات الرسمية . اقترحه نيكلاوس ويرث في الأصل عام 1977 كبديل لصيغة باكوس-ناور (BNF). يتميز ويرث بعدة مزايا عن صيغة باكوس-ناور، منها احتوائه على بنية تكرار صريحة، وتجنبه استخدام رمز صريح للسلسلة الفارغة (مثل <empty> أو ε). [ 1 ]

تم استخدام WSN في العديد من المعايير الدولية ، بدءًا من ISO 10303-21 . [ 2 ] كما تم استخدامه لتحديد بنية EXPRESS ، وهي لغة نمذجة البيانات الخاصة بـ STEP .

شبكة الاستشعار اللاسلكية محددة في حد ذاتها

SYNTAX = { PRODUCTION } . PRODUCTION = IDENTIFIER "=" EXPRESSION "." . EXPRESSION = TERM { "|" TERM } . TERM = FACTOR { FACTOR } . FACTOR = IDENTIFIER | LITERAL | "[" EXPRESSION "]" | "(" EXPRESSION ")" | "{" EXPRESSION "}" . IDENTIFIER = letter { letter } . LITERAL = """" character { character } """" .

تشير علامة المساواة إلى قاعدة إنتاج. يُعرَّف العنصر الموجود على اليسار بأنه مجموعة العناصر الموجودة على اليمين. وتنتهي قاعدة الإنتاج بنقطة.

  • يُشار إلى التكرار بواسطة الأقواس المعقوفة، على سبيل المثال، {a} تعني ε | a | aa | aaa | ... .
  • يتم التعبير عن الاختيارية بواسطة الأقواس المربعة، على سبيل المثال، [a]b تعني ab | b .
  • تُستخدم الأقواس للتجميع، على سبيل المثال، (أ|ب)ج تعني أ ج | ب ج .

نحن نعتبر هذه المفاهيم أمراً مسلماً به اليوم، لكنها كانت جديدة ومثيرة للجدل في عام 1977. قام ويرث لاحقاً بدمج بعض المفاهيم (بصيغة وتدوين مختلفين) في شكل باكوس-ناور الموسع .

لاحظ أن letterو characterغير معرفتين. وذلك لأن الأحرف الرقمية (الأرقام من 0 إلى 9) قد تُدرج في كلا التعريفين أو تُستبعد من أحدهما، وذلك حسب اللغة المستخدمة في التعريف، على سبيل المثال :

الرقم = "0" | "1" | "2" | "3" | "4" | "5" | " 6 " | "7" | "8" | "9" . الأحرف الكبيرة = "A" | "B" | | "Y" | "Z" . الأحرف الصغيرة = "a" | "b" | | "y" | "z" . الحرف = كبير | صغير .

إذا characterاستمر في تضمين الأحرف ASCIIdigit القابلة للطباعة وغيرها ، فإنه يختلف أكثر عن ، والذي يمكن للمرء أن يفترض أنه لا يتضمن الأحرف الرقمية أو أي من الأحرف الخاصة (غير الأبجدية الرقمية ).letter

مثال آخر

يمكن تمثيل بنية BNF باستخدام WSN على النحو التالي، بناءً على ترجمة مثال BNF الخاص به :

syntax = rule [ syntax ] . rule = opt-whitespace "<" rule-name ">" opt-whitespace "::=" opt-whitespace expression line-end . opt-whitespace = { " " } . expression = list [ "|" expression ] . line-end = opt-whitespace EOL | line-end line-end . list = term [ opt-whitespace list ] . term = literal | "<" rule-name ">" . literal = """" text """" | "'" text "'" .

يبدو هذا التعريف مُعقّدًا للغاية لأن مفهوم " المسافة البيضاء الاختيارية " يجب تعريفه صراحةً في صيغة BNF، بينما هو ضمني في WSN. حتى في هذا المثال، textتُركت قيمة غير مُعرّفة، ولكن يُفترض أنها تعني " ASCII-character { ASCII-character }". ( EOLتُركت قيمة أيضًا غير مُعرّفة). لاحظ كيف استُخدم هذا الحل المُلتوي مرتين لأن قيمة لم تُعرّف صراحةً."<" rule-name ">"text

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

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

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

مراجع