لغة وصف المُترجم
لغة وصف المترجم (CDL) هي لغة برمجة تعتمد على قواعد الزوائد . وهي تشبه إلى حد كبير صيغة باكوس-ناور (BNF). صُممت هذه اللغة لتطوير المترجمات ، وهي محدودة للغاية في إمكانياتها وتدفق التحكم، وهذا مقصود. لهذه القيود فائدتان.
من جهة، تُتيح هذه التقنيات تحليل تدفق البيانات والتحكم المتطور الذي تستخدمه مُحسِّنات CDL2، مما ينتج عنه شفرة برمجية فائقة الكفاءة. ومن فوائدها الأخرى أنها تُشجع على استخدام اصطلاح تسمية مُفصَّل للغاية، وهذا بدوره يُؤدي إلى برامج موثقة ذاتيًا إلى حد كبير .
تبدو اللغة شبيهةً إلى حدٍ ما بلغة برولوج (وهذا ليس بالأمر المفاجئ، إذ نشأت كلتا اللغتين في نفس الفترة تقريبًا نتيجةً للعمل على قواعد اللواحق ). مع ذلك، وعلى عكس برولوج، يعتمد تدفق التحكم في لغة CDL بشكلٍ حتمي على النجاح/الفشل، أي أنه لا يتم تجربة أي بدائل أخرى عند نجاح البديل الحالي. تُستخدم هذه الفكرة أيضًا في تحليل قواعد التعبيرات .
CDL3 هو الإصدار الثالث من لغة CDL، وهو يختلف اختلافًا كبيرًا عن الإصدارين السابقين.
تصميم
كانت النسخة الأصلية، التي صممها كورنيليس إتش إيه كوستر في جامعة نيميغن ، والتي ظهرت عام 1971، ذات مفهوم غير مألوف: إذ لم يكن لها نواة. عادةً ما تُترجم شفرة لغة البرمجة إلى تعليمات الآلة أو تسلسلات جاهزة من تلك التعليمات. تمثل هذه التعليمات النواة، أي أبسط المفاهيم المجردة التي تدعمها اللغة. قد تشمل هذه العمليات الأولية جمع الأرقام، ونسخ المتغيرات، وما إلى ذلك. تفتقر لغة CDL1 إلى هذه النواة. تقع على عاتق المبرمج مسؤولية توفير العمليات الأولية بصيغة يمكن تحويلها إلى تعليمات آلة باستخدام مُجمِّع أو مُترجم للغة تقليدية. لا تحتوي لغة CDL1 نفسها على مفهوم للعمليات الأولية، ولا على مفهوم لأنواع البيانات باستثناء كلمة الآلة (وحدة تخزين مجردة - ليست بالضرورة كلمة آلة حقيقية). قواعد التقييم مشابهة إلى حد كبير لوصف صيغة باكوس-ناور ؛ في الواقع، كتابة محلل نحوي للغة موصوفة بصيغة باكوس-ناور أمر بسيط في لغة CDL1.
تتألف اللغة أساسًا من قواعد. يمكن للقاعدة أن تنجح أو تفشل. تتكون القاعدة من بدائل، وهي عبارة عن تسلسلات من استدعاءات قواعد أخرى. تنجح القاعدة إذا نجح أي من بدائلها؛ وتُجرَّب هذه البدائل بالتتابع. ينجح البديل إذا نجحت جميع استدعاءات قواعده. توفر اللغة عوامل لإنشاء حلقات تقييم دون تكرار (مع أن هذا ليس ضروريًا تمامًا في CDL2 لأن المُحسِّن يحقق نفس النتيجة)، وبعض الاختصارات لزيادة كفاءة التقييم التكراري، لكن المفهوم الأساسي يبقى كما هو. إلى جانب التطبيق الواضح في تحليل القواعد النحوية الخالية من السياق ، تُعد CDL مناسبة أيضًا لتطبيقات التحكم، نظرًا لأن العديد من تطبيقات التحكم هي في جوهرها قواعد شرطية متداخلة بعمق.
يمكن لكل قاعدة من قواعد CDL1، أثناء تقييمها، أن تؤثر على بيانات من نوع غير محدد. من الناحية المثالية، لا ينبغي تغيير البيانات إلا إذا نجحت القاعدة (أي لا توجد آثار جانبية في حالة الفشل). يُسبب هذا مشكلة، فمع أن هذه القاعدة قد تنجح، إلا أن القاعدة التي تستدعيها قد تفشل، وفي هذه الحالة لا ينبغي أن يسري تغيير البيانات. من السهل نسبيًا (وإن كان يستهلك الكثير من الذاكرة) ضمان السلوك المذكور أعلاه إذا تم تخصيص جميع البيانات ديناميكيًا على مكدس. ومع ذلك، يصبح الأمر صعبًا للغاية عند وجود بيانات ثابتة، وهو ما يحدث غالبًا. يستطيع مُصرّف CDL2 الإشارة إلى الانتهاكات المحتملة بفضل اشتراط تحديد اتجاه المعاملات (إدخال، إخراج، إدخال-إخراج) ونوع القواعد (قابلة للفشل: اختبار ، شرط ؛ غير قابلة للفشل: دالة ، إجراء ؛ قابلة للتأثير الجانبي: شرط ، إجراء ؛ غير قابلة للتأثير الجانبي: اختبار ، دالة ).
بما أن تقييم القواعد يعتمد على استدعاء قواعد أبسط فأبسط، فمن المفترض أن توجد في الأسفل بعض القواعد الأساسية التي تقوم بالعمل الفعلي. وهنا تكمن المفاجأة في أن CDL1 لا يحتوي على هذه القواعد الأساسية. عليك توفير هذه القواعد بنفسك. إذا كنت بحاجة إلى عملية جمع في برنامجك، فعليك إنشاء قاعدة ذات مُدخلين ومُخرج واحد، ويتم تعيين المُخرج ليكون مجموع المُدخلين بواسطة الكود الخاص بك. يستخدم مُترجم CDL الكود الخاص بك كسلاسل نصية (هناك اصطلاحات لكيفية الإشارة إلى متغيرات الإدخال والإخراج) ويُصدره ببساطة عند الحاجة. إذا وصفت قاعدة الجمع باستخدام لغة التجميع، فستحتاج إلى مُجمِّع لترجمة مُخرجات مُترجم CDL إلى لغة الآلة . إذا وصفت جميع القواعد الأساسية (الماكرو في مصطلحات CDL) بلغة باسكال أو سي، فستحتاج إلى مُترجم باسكال أو سي لتشغيله بعد مُترجم CDL. قد يكون هذا النقص في العناصر الأساسية عائقًا كبيرًا عند كتابة جزء صغير من التعليمات البرمجية، حتى لأبسط عمليات تعليمات الآلة. مع ذلك، فإنه يمنحك مرونة كبيرة في تنفيذ عناصر أساسية مجردة ومعقدة تعمل على كائنات مجردة غير مألوفة (فمصطلح "كلمة الآلة" في لغة وصف الأجهزة أشبه بـ"وحدة تخزين بيانات"، دون الإشارة إلى نوع البيانات المخزنة فيها). إضافةً إلى ذلك، اعتمدت المشاريع الكبيرة على مكتبات مُصممة بعناية من العناصر الأساسية، ثم جرى نسخها لكل بنية مستهدفة ونظام تشغيل، مما أتاح إنتاج تعليمات برمجية عالية الكفاءة للجميع.
للحصول على فكرة عن اللغة، إليك جزء صغير من التعليمات البرمجية مقتبس من دليل CDL2:
ACTION quicksort + >from + >to -p -q: أقل + من + إلى، تقسيم + من + إلى + ص + ق، quicksort+from+q, quicksort+p+to; +. ACTION split + >i + >j + p> + q> -m: اصنع +p +i، اصنع +q +j، أضف +i +j +m، اقسم +m على اثنين، (مرة أخرى: تحرك للأعلى + j + p + m، تحرك للأسفل + i + q + m، (أقل + ص + ق، تبديل العنصر + ص + ق، زيادة + ص، إنقاص + ق، *مرة أخرى؛ أقل + ص + م، تبديل العنصر + ص + م، زيادة + ص؛ أقل + م + ق، تبديل عنصر + ق + م، إنقاص + ق؛ +)). وظيفة التحرك لأعلى + >j + >p> + >m: أقل + j + p؛ عنصر أصغر + م + ب؛ زيادة + ص، *. وظيفة التحرك لأسفل + >i + >q> + >m: أقل + ق + ي؛ عنصر أصغر + q + m؛ decr+q, *. اختبار أقل+>أ+>ب:=أ"<"ب". الدالة make+a>+>b:=a"="b. دالة add+>a+>b+sum>:=sum"="a"+"b. دالة halve+>a>:=a"/=2". دالة incr+>a>:=a"++". دالة decr+>a>:=a"--". اختبار العنصر الأصغر +> i +> j: "items["i"] <items["j"]". إجراء تبديل العناصر+>i+>jt:=t"=items["i"];items["i"]=items["j"];items["j"]=t. تُعرَّف العمليات الأساسية هنا بلغة جافا (أو سي). هذا ليس برنامجًا كاملاً؛ يجب تعريف عناصر مصفوفة جافا في مكان آخر.
حافظت لغة CDL2، التي ظهرت عام 1976، على مبادئ CDL1، لكنها جعلتها مناسبة للمشاريع الكبيرة. فقد أدخلت الوحدات النمطية، وفرضت تغيير البيانات فقط عند نجاح العملية، ووسّعت إمكانيات اللغة إلى حد ما. وكانت مُحسِّنات الأداء في مُصرِّف CDL2، وخاصةً في بيئة CDL2 Laboratory (بيئة تطوير متكاملة للغة CDL2)، من الطراز العالمي، ليس فقط في ذلك الوقت. ومن أبرز ميزات مُحسِّن الأداء في CDL2 Laboratory أنه قادر على إجراء تحسينات على مستوى وحدات التجميع، أي التعامل مع البرنامج بأكمله كعملية تجميع واحدة.
لغة CDL3 هي لغة أحدث. تخلت عن ميزة الانفتاح التي ميزت الإصدارات السابقة من CDL، وتوفر الآن وظائف أساسية للعمليات الحسابية والوصول إلى البيانات. كما تم تخفيف القيود الصارمة التي كانت تميز الإصدارات السابقة من CDL (حيث كان عدد الكلمات المفتاحية والرموز يتكون من خانة واحدة). أصبحت بعض المفاهيم الأساسية تُعبّر عنها الآن بالصيغة بدلاً من الدلالات الصريحة. بالإضافة إلى ذلك، أُضيفت أنواع البيانات إلى اللغة.
يستخدم
يُعدّ برنامج mbp Cobol التجاري (مترجم لغة كوبول لأجهزة الكمبيوتر الشخصية) ونظام MProlog (تطبيق برولوج صناعي قوي يعمل على العديد من البنى (مثل IBM mainframe وVAX وPDP-11 و Intel 8086 وغيرها) وأنظمة التشغيل (مثل DOS/OS/CMS/BS2000 وVMS/Unix وDOS/Windows/OS2)) دليلاً على قابلية نقل CDL2.
مع أن معظم البرامج المكتوبة بلغة CDL كانت عبارة عن مترجمات، إلا أن هناك تطبيقًا تجاريًا واحدًا على الأقل بواجهة مستخدم رسومية تم تطويره وصيانته باستخدام هذه اللغة. كان هذا التطبيق مخصصًا لالتقاط صور الأسنان، وهو الآن مملوك لشركة DEXIS. كما تم تطوير نظام لإدارة عيادات الأسنان باستخدام لغة CDL في وقت سابق.
تمت كتابة برنامج حاسوب الشطرنج ميفيستو الثالث باستخدام لغة CDL2. [ 1 ]
مراجع
- ^ نيتشه ، توماس (1984). "داس ميفيستو 3-مشروع" . شاش إيكو (7/ 1984) . تم الاسترجاع في 1 أبريل 2016 .
للمزيد من القراءة
- كتاب عن لغة CDL1 / CDL2
- وصف CDL3
- Bedő Árpád: Programkészítési Módszerek; Közgazdasági és Jogi Könyvkiadó، 1979. ISBN 963-220-760-2
- مولدات المحلل اللغوي
- بناء المترجم
- اللغات الرسمية
- نظرية المترجمات
