قواعد فان وينجاردن
في علوم الكمبيوتر ، قواعد فان وينجاردن (وتسمى أيضًا قواعد فان وينجاردن أو قواعد فان وينجاردن [1] ) هي صيغة لتحديد اللغات الرسمية . يشتق الاسم من الصيغة التي اخترعها أدريان فان وينجاردن [2] لغرض تحديد لغة البرمجة ALGOL 68. تظل المواصفات الناتجة [3] هي تطبيقها الأكثر شهرة.
تعالج قواعد فان وينجاردن مشكلة عدم قدرة القواعد الخالية من السياق على التعبير عن الاتفاق أو الإشارة، حيث يجب أن يتفق جزءان مختلفان من الجملة مع بعضهما البعض بطريقة ما. على سبيل المثال، الجملة "The birds was eating" ليست إنجليزية قياسية لأنها تفشل في الاتفاق على العدد . ستحلل القواعد الخالية من السياق "The birds was eating" و"The birds were eating" و"The bird was eating" بنفس الطريقة. ومع ذلك، تتمتع القواعد الخالية من السياق بفائدة البساطة بينما تعتبر قواعد فان وينجاردن معقدة للغاية. [4]
مستويين
قواعد اللغة W هي قواعد نحوية ذات مستويين : يتم تعريفها بواسطة زوج من القواعد النحوية، والتي تعمل على مستويات مختلفة:
- إن القواعد النحوية هي قواعد نحوية خاصة ، أي مجموعة من قواعد النحو الخالية من السياق والتي قد تحتوي فيها المحطات غير الطرفية على سمات؛ و
- الميتاغرامار هو قواعد نحوية خالية من السياق تحدد القيم المحتملة لهذه السمات.
يتم تعريف مجموعة السلاسل التي تم إنشاؤها بواسطة قواعد W من خلال عملية مكونة من مرحلتين:
- داخل كل قاعدة فرعية، لكل سمة تظهر فيها، اختر قيمة لها تم إنشاؤها بواسطة metagrammar؛ والنتيجة هي قاعدة نحوية طبيعية خالية من السياق؛ افعل هذا بكل طريقة ممكنة؛
- استخدم قواعد اللغة الخالية من السياق الناتجة (ربما لا نهائية) لإنشاء سلاسل بالطريقة العادية.
إن الاستبدال المتسق المستخدم في الخطوة الأولى هو نفسه الاستبدال في منطق المسند ، ويدعم في الواقع البرمجة المنطقية ؛ وهو يتوافق مع التوحيد في Prolog ، كما لاحظ Alain Colmerauer [ أين؟ ] .
قواعد اللغة W هي قواعد تورينج كاملة ؛ [5] وبالتالي، فإن جميع مشكلات القرار المتعلقة باللغات التي تولدها، مثل
- ما إذا كانت قواعد اللغة W تولد سلسلة معينة
- ما إذا كانت قواعد اللغة W لا تولد أي سلاسل على الإطلاق
غير قابلة للحسم .
تم تطوير المتغيرات المختصرة، المعروفة باسم قواعد البادئة ، وتم تطبيقها في بناء المترجم ووصف اللغات الطبيعية.
يمكن اعتبار البرامج المنطقية المحددة ، أي البرامج المنطقية التي لا تستخدم النفي، فئة فرعية من قواعد W. [6]
الدافع والتاريخ
في الخمسينيات من القرن العشرين، بدأت محاولات تطبيق أجهزة الكمبيوتر على التعرف على اللغات الطبيعية وتفسيرها وترجمتها، مثل الإنجليزية والروسية. يتطلب هذا وصفًا يمكن قراءته آليًا لبنية العبارة في الجمل، والذي يمكن استخدامه لتحليلها وتفسيرها، وإنشائها. تم اعتماد القواعد النحوية الخالية من السياق، وهو مفهوم من علم اللغة البنيوي ، لهذا الغرض؛ يمكن لقواعدها التعبير عن كيفية بناء الجمل بشكل متكرر من أجزاء من الكلام ، مثل عبارات الاسم وعبارات الفعل ، وفي النهاية الكلمات ، مثل الأسماء والأفعال والضمائر .
أثر هذا العمل على تصميم وتنفيذ لغات البرمجة ، وأبرزها ALGOL 60 ، الذي قدم وصفًا لقواعد اللغة في شكل Backus–Naur .
ومع ذلك، لا تستطيع القواعد الخالية من السياق التعبير عن الاتفاق أو الإشارة ( التماثل )، حيث يجب أن يتفق جزءان مختلفان من الجملة مع بعضهما البعض بطريقة ما.
يمكن التعبير عن هذه بسهولة باستخدام قواعد اللغة W. (انظر المثال أدناه.)
تتضمن لغات البرمجة مفاهيم مماثلة للتصنيف والنطاق . يجب على المترجم أو المفسر للغة التعرف على استخدامات المتغير التي تنتمي إلى نفس المتغير. يخضع هذا عادةً لقيود مثل:
- يجب تهيئة المتغير قبل استخدام قيمته.
- في اللغات ذات النوع القوي، يتم تعيين نوع لكل متغير، ويجب على جميع استخدامات المتغير احترام نوعه.
- في كثير من الأحيان، يجب أن يتم الإعلان عن نوعه صراحةً، قبل الاستخدام.
تعتمد قواعد اللغة W على فكرة توفير الرموز غير النهائية لقواعد اللغة الخالية من السياق مع السمات (أو اللاحقات ) التي تمرر المعلومات بين عقد شجرة التحليل ، والتي تُستخدم لتقييد بناء الجملة وتحديد الدلالات.
كانت هذه الفكرة معروفة جيدًا في ذلك الوقت؛ على سبيل المثال، زار دونالد كنوث لجنة تصميم ALGOL 68 أثناء تطوير نسخته الخاصة منها، قواعد السمات . [7]
من خلال تعزيز وصف بناء الجملة بالسمات، يمكن التحقق من القيود مثل القيود المذكورة أعلاه، مما يؤدي إلى استبعاد العديد من البرامج غير الصالحة في وقت التجميع. كما كتب فان وينجاردن في مقدمته: [2]
كانت اعتراضاتي الرئيسية تتعلق بالتأكيد بالقيود غير الضرورية وتعريف بناء الجملة والدلالات. في الواقع، ينتج بناء الجملة الذي نراه في MR 75 عددًا كبيرًا من البرامج، في حين أنني أفضل أن يكون الجزء الفرعي من البرامج ذات المغزى كبيرًا قدر الإمكان، وهو ما يتطلب بناء جملة أكثر صرامة. [...] سرعان ما أصبح من الواضح أن بعض الأدوات الأفضل من تدوين باكوس قد تكون مفيدة [...]. لقد طورت مخططًا [...] يتيح تصميم لغة تحمل قدرًا أكبر بكثير من المعلومات في بناء الجملة مما يتم حمله عادةً.
كان من الغريب جدًا بالنسبة لقواعد اللغة W معاملتها الصارمة للسمات كسلاسل، والتي تم تحديدها من خلال قواعد نحوية خالية من السياق، حيث يكون التجميع هو العملية الوحيدة الممكنة؛ يمكن تعريف هياكل البيانات المعقدة والعمليات من خلال مطابقة الأنماط . (انظر المثال أدناه.)
بعد تقديمها في "التقرير النهائي" لـ ALGOL 68 عام 1968 ، تم اعتبار قواعد W على نطاق واسع قوية للغاية وغير مقيدة بحيث لا تكون عملية. [ بحاجة لمصدر ]
كان هذا جزئيًا نتيجة للطريقة التي تم تطبيقها بها؛ يحتوي "التقرير المنقح" لـ ALGOL 68 لعام 1973 على قواعد نحوية أكثر قابلية للقراءة، دون تعديل صيغة قواعد W نفسها.
في غضون ذلك، أصبح من الواضح أن قواعد W، عندما تُستخدم بكامل عموميتها، قوية للغاية لأغراض عملية مثل العمل كمدخل لمولد المحلل . فهي تصف بدقة جميع اللغات القابلة للعد بشكل متكرر ، [8] مما يجعل التحليل مستحيلًا بشكل عام: إنها مشكلة غير قابلة للحسم لتحديد ما إذا كان من الممكن إنشاء سلسلة معينة بواسطة قواعد W معينة.
ومن ثم، يجب تقييد استخدامها بشكل جدي عند استخدامها للتحليل الآلي أو الترجمة. وقد تم تطوير متغيرات مقيدة ومعدلة من قواعد اللغة W لمعالجة هذه المشكلة، على سبيل المثال
- قواعد البادئة الممتدة (EAGs)، المطبقة لوصف قواعد اللغة الطبيعية مثل الإنجليزية والإسبانية؛
- أنظمة Q ، والتي يتم تطبيقها أيضًا على معالجة اللغة الطبيعية؛
- سلسلة لغات CDL ، يتم استخدامها كلغات بناء المترجم للغات البرمجة .
بعد سبعينيات القرن العشرين، تضاءل الاهتمام بهذا النهج؛ وفي بعض الأحيان، يتم نشر دراسات جديدة. [9]
أمثلة
الاتفاق في قواعد اللغة الانجليزية
في اللغة الإنجليزية، الأسماء والضمائر والأفعال لها سمات مثل العدد النحوي والجنس والشخص ، والتي يجب أن تتفق بين الفاعل والفعل الرئيسي والضمائر التي تشير إلى الفاعل:
- أنا أغسل نفسي.
- تغسل نفسها.
- نحن نغسل أنفسنا.
هي جمل صحيحة؛ أما الجمل غير الصحيحة فهي، على سبيل المثال:
- *نحن نغسل أنفسنا.
- *تغسل نفسها.
- *نحن نغسل نفسها.
هنا، الاتفاق يعمل على التأكيد على أن كلا الضميرين (على سبيل المثال أنا ونفسي ) يشيران إلى نفس الشخص.
قواعد نحوية خالية من السياق لتوليد كل هذه الجمل:
< جملة > ::= < فاعل > < فعل > < مفعول به > < فاعل > :: = أنا | أنت | هو | هي | نحن | هم
< فعل > ::= يغسل | يغسل
< مفعول به > ::= نفسي | نفسك | نفسه | نفسها | أنفسنا | أنفسكم | أنفسهم
ومن هنا <sentence>يمكننا إنشاء كافة التركيبات:
انا اغسل نفسي انا اغسل نفسي أنا أغسل نفسي [...] إنهم يغسلون أنفسهم يغسلون أنفسهم
قواعد W لتوليد الجمل الصحيحة فقط:
<الجملة < الرقم > < الجنس > < الشخص > >
::= <الموضوع < الرقم > < الجنس > < الشخص > >
<فعل < رقم > < شخص > >
<الكائن < الرقم > < الجنس > < الشخص > >
<الموضوع المفرد < الجنس > الأول> ::= أنا
<الموضوع < الرقم > < الجنس > 2nd> ::= أنت
< الموضوع المفرد الذكر الثالث > ::= هو
< الموضوع المفرد الأنثى الثالثة > ::= هي
<الموضوع الجمع < الجنس > الأول> ::= نحن
<الموضوع المفرد < الجنس > الثالث> ::= هم
< الفعل المفرد الأول > ::= يغسل
< الفعل المفرد الثاني > ::= يغسل
< الفعل المفرد الثالث > ::= يغسل
<فعل جمع < شخص > > ::= غسل
<object singular < GENDER > 1st> ::= نفسي
<object singular < GENDER > 2nd> ::= نفسك
< object singular male 3rd > ::= نفسه
< object singular female 3rd > ::= نفسها
<object plural < GENDER > 1st> ::= أنفسنا
<object plural < GENDER > 2nd> ::= أنفسكم
<object plural < GENDER > 3rd> ::= أنفسهم
< رقم > ::= = مفرد | جمع
< جنس > ::= = ذكر | أنثى
< شخص > ::= = الأول | الثاني | الثالث
لغة قياسية غير خالية من السياق
اللغة غير الخالية من السياق المعروفة هي
القواعد النحوية ذات المستويين لهذه اللغة هي القواعد النحوية
- ن ::= 1 | ن1
- س ::= أ | ب
مع مخطط القواعد النحوية
- البداية ::= ⟨a N ⟩ ⟨b N ⟩ ⟨a N ⟩
- ⟨X N1 ⟩ ::= ⟨X N ⟩ X
- ⟨X 1 ⟩ ::= X
الأسئلة. إذا استبدلنا حرفًا جديدًا، مثل C، بحرف N1، فهل يتم الحفاظ على اللغة الناتجة عن القواعد النحوية؟ أم يجب قراءة الحرف N1 كسلسلة من رمزين، أي N متبوعًا بـ 1؟ نهاية الأسئلة.
تتطلب الاستخدام الصحيح للمتغيرات في ALGOL
يحدد التقرير المنقح عن لغة الخوارزمية Algol 60 [10] قواعد نحوية كاملة خالية من السياق للغة.
يتم تعريف المهام على النحو التالي (القسم 4.2.1):
< الجزء الأيسر >
::= < المتغير > :=
| < معرف الإجراء > :=
< قائمة الجزء الأيسر >
::= < الجزء الأيسر >
| < قائمة الجزء الأيسر > < الجزء الأيسر >
< بيان التعيين >
::= < قائمة الجزء الأيسر > < تعبير حسابي >
| < قائمة الجزء الأيسر > < تعبير منطقي >
يمكن أن يكون A <variable>(من بين أشياء أخرى) <identifier>، والذي بدوره يتم تعريفه على النحو التالي:
<معرف> ::= <حرف> | <معرف> <حرف> | <معرف> <رقم>
الأمثلة (القسم 4.2.2):
س:=ص[0]:=ن:=ن+1+س ن:=ن+1 أ:=ب/ق ... S[v,k+2]:=3-arctan(sTIMESzeta) ف:=س>ص^ز
يجب التحقق من نوع التعبيرات والمهام : على سبيل المثال،
- في
n:=n+1، يجب أن يكون n عددًا (صحيحًا أو حقيقيًا)؛ - في
A:=B/C-v-q×S، يجب أن تكون جميع المتغيرات أرقامًا؛ - في
V:=Q>Y^Z، يجب أن تكون جميع المتغيرات من النوع المنطقي.
تميز القواعد أعلاه بين <arithmetic expression>و <Boolean expression>، ولكنها لا تستطيع التحقق من أن نفس المتغير له دائمًا نفس النوع.
يمكن التعبير عن هذا المطلب (غير الخالي من السياق) في قواعد اللغة W من خلال شرح القواعد باستخدام السمات التي تسجل، لكل متغير يتم استخدامه أو تعيينه له، اسمه ونوعه.
يمكن بعد ذلك نقل هذا السجل إلى جميع الأماكن في القواعد النحوية حيث يتعين مطابقة الأنواع، وتنفيذ فحص النوع.
وبالمثل، يمكن استخدامه للتحقق من تهيئة المتغيرات قبل الاستخدام، وما إلى ذلك.
قد يتساءل المرء عن كيفية إنشاء مثل هذه البنية للبيانات والتلاعب بها دون دعم صريح في الصيغة الخاصة ببنى البيانات والعمليات عليها. ويمكن القيام بذلك باستخدام metagrammar لتحديد تمثيل سلسلة لبنية البيانات واستخدام مطابقة الأنماط لتحديد العمليات:
< الجزء الأيسر مع <TYPED> <NAME> >
:: = < متغير مع <TYPED> <NAME> > : = |
<معرف الإجراء مع <TYPED> <NAME> > : =
<
الجزء الأيسر من القائمة <TYPEMAP1> > ::
= < الجزء الأيسر مع <TYPED> <NAME> >
<حيث < TYPEMAP1 > هو < TYPED > < NAME > المضافة إلى < EMPTY > > المفرزة
| <قائمة الجزء الأيسر < TYPEMAP2 > >
<الجزء الأيسر مع < مكتوب > < الاسم > >
<حيث < TYPEMAP1 > هو < TYPED > < NAME > المضافة إلى < TYPEMAP2 > > المصنفة
<جملة التعيين < مُخصص لـ > < مُستخدم > >
::= <قائمة الجزء الأيسر < مُخصص لـ > > <تعبير حسابي < مُستخدم > >
| <قائمة الجزء الأيسر < مُخصص لـ > > <تعبير منطقي < مُستخدم > >
<حيث < TYPED > < NAME > هو < TYPED > < NAME > المضافة إلى < EMPTY > >
المفرزة ::=
<حيث < TYPEMAP1 > هو < TYPED1 > < NAME1 > تمت إضافته إلى < TYPEMAP2 > >
::= <حيث < TYPEMAP2 > هو < TYPED2 > < NAME2 > تمت إضافته إلى < TYPEMAP3 > ><
حيث <NAME1> موجود معجميًا قبل <NAME2> >
<حيث < TYPEMAP1 > هو < TYPED1 > < NAME1 > تمت إضافته إلى < TYPEMAP2 > >
::= <حيث < TYPEMAP2 > هو < TYPED2 > < NAME2 > تمت إضافته إلى < TYPEMAP3 > ><
حيث <NAME2> موجود معجميًا قبل <NAME1> >
<حيث < TYPEMAP3 > هو < TYPED1 > < NAME1 > تمت إضافته إلى < TYPEMAP4 > > المصنف
<
حيث < فارغ > يأتي معجميًا قبل <NAME1> > :: = < حيث <NAME1>
يكون < حرفًا أو رقمًا > متبوعًا بـ <NAME2> >
<
حيث <NAME1> يأتي معجميًا قبل <NAME2> > :: = < حيث <NAME1>
يأتي بعد <NAME3> حرف أو رقم ><
حيث <NAME2> هو < حرف أو رقم > متبوعًا بـ <NAME4> ><
حيث <NAME3> موجود معجميًا قبل <NAME4> >
<
حيث <NAME1> يأتي معجميًا قبل <NAME2> > :: = < حيث <NAME1> يأتي مع <
الحرف أو الرقم 1 > متبوعًا بـ <NAME3> ><
حيث <NAME2> هو < الحرف أو الرقم 2 > متبوعًا بـ <NAME4> >
<حيث < الحرف أو الرقم 1 > يسبق + < الحرف أو الرقم 2 >
<حيث < الحرف أو الرقم 1 > يسبق + < الحرف أو الرقم 2 >
::= <حيث < الحرف أو الرقم 1 > يسبق < الحرف أو الرقم 2 >
<حيث < الحرف أو الرقم 1 > يسبق + < الحرف أو الرقم 2 >
::= <حيث < الحرف أو الرقم 1 > يسبق + < الحرف أو الرقم 3 >
<حيث < الحرف أو الرقم 3 > يسبق + < الحرف أو الرقم 2 >
< حيث a تسبق b > :==
< حيث b تسبق c > :==
[...]
< TYPED > ::= = حقيقي | عدد صحيح | منطقي
< الاسم > ::= = < الحرف > | < الاسم > < الحرف > | < الاسم > < رقم >
< حرف أو رقم > ::= = < الحرف > | < رقم >
< الحرف أو الرقم 1 > ::= < الحرف أو الرقم >
< الحرف أو الرقم 2 > ::= < الحرف أو الرقم >
< الحرف أو الرقم 3 > ::= < الحرف أو الرقم >
< الحرف > ::= = أ | ب | ج | [...]
< رقم > ::= = 0 | 1 | 2 | [...]
< NAMES1 > ::= = < NAMES >
< NAMES2 > ::= = < NAMES >
< مُخصص لـ > ::= = < NAMES >
< مُستخدم > ::= = < NAMES >
< NAMES > ::= = < NAME > | < NAME > < NAMES >
< فارغ > ::= =
< رمز النوع > ::= = ( < مكتوب > < الاسم > ) < رمز النوع >
< رمز النوع1 > ::= = < رمز النوع >
< رمز النوع2 > :: = = < رمز النوع >
< رمز النوع3 > ::= = < رمز النوع >
عند المقارنة مع القواعد النحوية الأصلية، تمت إضافة ثلاثة عناصر جديدة:
- السمات المميزة للمحطات غير النهائية في ما يسمى الآن بالقواعد الفائقة؛
- قواعد أساسية لتحديد القيم المسموح بها للسمات؛
- قواعد فرعية جديدة لتحديد العمليات على قيم السمات.
القواعد الجديدة هي قواعد ε : فهي تولد السلسلة الفارغة فقط.
أمثلة على ALGOL 68
تستخدم تقارير ALGOL 68 تدوينًا مختلفًا قليلاً بدون <أقواس زاوية>.
ALGOL 68 كما هو الحال في التقرير النهائي لعام 1968 §2.1
أ) البرنامج: الرمز المفتوح، المقدمة القياسية،
خيار مقدمة المكتبة، برنامج معين، الخروج،
خيار خاتمة المكتبة، خاتمة قياسية، رمز الإغلاق.
ب) المقدمة القياسية: تسلسل المقدمة الإعلانية.
ج) مقدمة المكتبة: تسلسل مقدمة الإعلان.
د) برنامج خاص:
خيار تسلسل العلامة، شرط مغلق قوي.
هـ) الخروج: رمز الاستمرار، حرف e، حرف x، حرف i، حرف t، رمز العلامة.
و) خاتمة المكتبة: فاصل بياني.
ج) خاتمة قياسية: جملة فارغة قوية
ALGOL 68 كما هو الحال في التقرير المنقح لعام 1973 §2.2.1، §10.1.1
البرنامج : قوي فارغ جملة مغلقة جديدة
أ) خارجي:: معيار؛ مكتبة؛ نظام؛ خاص.
ب) توقف:: حرف العلامة س حرف العلامة ت حرف العلامة و حرف العلامة ص.
أ) نص البرنامج: رمز البداية STYLE، المقدمات الجديدة LAYER1،
الرمز المتوازي، حزمة مهام LAYER1 الجديدة،
رمز نهاية النمط.
ب) مقدمات NEST1: مقدمة NEST1 القياسية مع DECS1،
مقدمة لمكتبة NEST1 مع DECSETY2،
مقدمة نظام NEST1 مع DECSETY3، حيث (NEST1) هو
(جديد فارغ جديد DECS1 DECSETY2 DECSETY3).
ج) مقدمة خارجية لـ NEST1 مع DECSETY1:
سلسلة NEST1 الفارغة القوية مع DECSETY1، انتقل إلى الرمز المميز؛
حيث (DECSETY1) هو (فارغ)، فارغ.
د) مهام NEST1: قائمة مهام نظام NEST1، والرمز أيضًا،
قائمة حزمة مهام المستخدم NEST1.
هـ) مهمة نظام NEST1: وحدة NEST1 فارغة تمامًا.
و) مهمة مستخدم NEST1: مقدمة خاصة بـ NEST2 مع DECS،
حزمة برنامج NEST2 الخاصة، انتقل إلى الرمز المميز،
خاتمة خاصة لـ NEST2،
حيث (NEST2) هو (NEST1 new DECS STOP).
ج) برنامج NEST2 الخاص:
تعريف تسمية NEST2 الجديدة LABSETY3 المنضمة
من LABSETY3، فراغ قوي NEST2 جديد LABSETY3
جملة مرفقة.
ح) تعريف العلامة المنضمة إلى NEST لـ LABSETY:
حيث (LABSETY) هو (فارغ)، فارغ؛
حيث (LABSETY) هو (LAB1 LABSETY1)،
تعريف علامة NEST لـ LAB1،
تم انضمام NEST إلى تعريف العلامة لـ $ LABSETY1.
ط) NEST2 postlude معين:
سلسلة NEST2 ذات الفراغ القوي مع STOP.
مثال بسيط على قوة قواعد اللغة الإنجليزية هو الجملة
أ) نص البرنامج: رمز البداية STYLE، المقدمات الجديدة LAYER1،
الرمز المتوازي، حزمة مهام LAYER1 الجديدة،
رمز نهاية النمط.
يسمح هذا بـ BEGIN ... END و { } كفاصلات كتلة، مع استبعاد BEGIN ... } و { ... END.
قد يرغب المرء في مقارنة القواعد النحوية في التقرير مع محلل Yacc لمجموعة فرعية من ALGOL 68 بواسطة Marc van Leeuwen. [11]
التنفيذات
كتب أنتوني فيشر yo-yo ، [12] وهو محلل لفئة كبيرة من قواعد W، مع قواعد نحوية نموذجية لتعبيرات ، eva ، sal و Pascal ( يستخدم معيار ISO 7185 الفعلي لباسكال نموذج Backus–Naur الموسع ).
أنشأ ديك جرون برنامجًا بلغة C من شأنه أن يُنشئ جميع الإنتاجات الممكنة لقواعد اللغة W. [13]
التطبيقات خارج ALGOL 68
يمكن اعتبار تطبيقات قواعد البادئة الممتدة (EAG) المذكورة أعلاه بمثابة تطبيقات لقواعد W، نظرًا لأن قواعد البادئة الممتدة قريبة جدًا من قواعد W. [14]
وقد تم اقتراح قواعد اللغة الإنجليزية أيضًا لوصف الأفعال البشرية المعقدة في بيئة العمل . [ بحاجة لمصدر ]
تم أيضًا توفير وصف قواعد اللغة W لـ Ada . [15]
انظر أيضا
مراجع
- ^ كليفلاند، ج. كريج؛ أوزجاليس، روبرت سي. (1977). قواعد اللغة للغات البرمجة . إلسيفير. رقم ISBN 978-0-444-00199-3.
- ^ ab van Wijngaarden, Adriaan (1972-04-04) [Premature and initial edition 1965-10-22]. MR 76: Orthogonal design and description of a formal language (PDF) (تقرير فني). أمستردام: CWI . مؤرشف من الأصل (PDF) في 2017-10-02.
- ^ van Wijngaarden, A.; et al. (eds.). "تقرير منقح عن لغة الخوارزمية ALGOL 68". مؤرشف من الأصل في 24 يناير 2002.
- ^ Koster, CHA (1996). "The making of Algol 68". في Bjørner, D; Broy, M.; Pottosin, IV (eds.). Perspectives of System Informatics. Lecture Notes in Computer Science. المجلد 1181. برلين: سبرينغر. ص 55-67. doi :10.1007/3-540-62064-8_6. ISBN 978-3-540-62064-8.
- ^ سينتزوف، م. (1967). “وجود بناء جملة van Wijngaarden لكل مجموعة قابلة للتعداد بشكل متكرر”. حوليات الجمعية العلمية في بروكسل . 2 : 115-118.
- ^ Deransart, Pierre; Maluszynski, Jan (1993), "Grammatical Extensions of Logic Programs", A Grammatical View of Logic Programming , The MIT Press, pp. 109–140, doi :10.7551/mitpress/3345.003.0008, ISBN 9780262290845تم الاسترجاع بتاريخ 2023-06-14
- ^ Knuth, Donald E (1990), "The genesis of attribute grammars" ( Plain TeX , gZiped ) , Proceedings of the International Conference on Attribute Grammars and Their Applications , Springer Verlag : 1–12.
- ^ سينتزوف، م. (1967). “وجود بناء جملة van Wijngaarden لكل مجموعة قابلة للتعداد بشكل متكرر”. حوليات الجمعية العلمية في بروكسل . 81 : 115-118.
- ^ أوغوستو، إل إم (2023). "قواعد النحو ذات المستويين: بعض الخصائص المثيرة للاهتمام لقواعد قواعد van Wijngaarden" (PDF) . أوميغا - مجلة اللغات الرسمية . 1 : 3-34.
- ^ Backus, JW; et al. (1963). "تقرير منقح عن لغة الخوارزمية ALGOL 60". مجلة الكمبيوتر . 5 (4): 349-367. doi : 10.1093/comjnl/5.4.349 .
- ^ "Syntax"، Algol 68، FR : جامعة بواتييه
- ^ فيشر، أنتوني، "يو يو"، برمجيات، المملكة المتحدة : يورك.
- ^ جرون، ديك، مولد جملة من مستويين، NL : VU.
- ^ ألبلاس، هنك؛ ميليشار، بوريفوي (1991). قواعد النحو والتطبيقات والأنظمة الخاصة بالصفات. مذكرات محاضرات في علوم الكمبيوتر. المجلد 545. سبرينغر. ص 371. رقم ISBN 978-3540545729.
- ^ فلاورز، روي، وصف قواعد اللغة الإنجليزية لـ Ada (PDF) (أطروحة ماجستير)، معهد القوات الجوية للتكنولوجيا، الجامعة الجوية
قراءة إضافية
- أوغستو، إل إم (2023). "قواعد فان وينجاردن النحوية: كتاب تمهيدي في بناء الجملة مع قيود قابلة للحسم" (ملف PDF) . مجلة هياكل وأنظمة المعرفة . 4 : 1-39.
- بيمبرتون، ستيفن (2016) [1982]. “التعريف الدلالي القابل للتنفيذ للغات البرمجة باستخدام القواعد النحوية ذات المستويين (قواعد Van Wijngaarden)”. أمستردام: سنتروم ويسكوندي وإنفورماتيكا..
- بيترسون، كينت (1990). "قواعد اللغة والدلالات في لغات البرمجة" (PDF) . مسودة ملاحظات المحاضرة . مؤرشف من الأصل (PDF) في 5 يونيو 2001.
