إكس بي إل

لغة البرمجة XPL ، اختصارًا لـ Expert's Programming Language [ 1 هي لغة برمجة مبنية على PL/I ، ومترجم أحادي المرور محمول مكتوب بلغة خاصة بها، وأداة لتوليد المحللات اللغوية لتسهيل تنفيذ مترجمات مماثلة للغات أخرى. صُممت XPL عام 1967 كوسيلة لتعليم مبادئ تصميم المترجمات وكنقطة انطلاق للطلاب لبناء مترجمات للغاتهم الخاصة.

صُممت لغة البرمجة XPL وطُبقت بواسطة ويليام م. ماكيمان ، [ 2 ] [ 3 ] وديفيد ب. وورتمان ، وجيمس ج. هورنينج، وآخرين في جامعة ستانفورد . أُعلن عن XPL لأول مرة في مؤتمر الحاسوب المشترك لخريف عام 1968. وُصفت طرقها ومترجمها بالتفصيل في كتاب "مولد المترجمات" الصادر عام 1971 .

أطلقوا على العمل المُدمج اسم "مولد المترجمات". لكن هذا يعني ضمناً أن بناء مترجم للغة أو هدف جديد يتطلب برمجة خاصة بلغة أو هدف جديد، أو يكاد يكون معدوماً. لذا، يُعدّ " نظام كتابة المترجمات " وصفاً أدقّ لـ XPL ، إذ يُسهّل كتابة المترجم باستخدام كمية أقل من التعليمات البرمجية الجديدة أو المُعدّلة.

لغة

لغة XPL هي لهجة بسيطة وصغيرة وفعّالة من لغة PL/I، صُممت أساسًا لكتابة المترجمات. استُخدمت لغة XPL أيضًا لأغراض أخرى بعد توفرها. يمكن ترجمة XPL بسهولة إلى معظم الأجهزة الحديثة باستخدام مترجم بسيط. يمكن كتابة تفاصيل المترجم الداخلية بسهولة بلغة XPL، كما أن الكود سهل القراءة. صُممت لغة PL/I من قِبل لجنة تابعة لشركة IBM عام 1964 كلغة شاملة تحل محل لغات Fortran و COBOL و ALGOL ، وتلبي جميع احتياجات العملاء والاحتياجات الداخلية. هذه الأهداف الطموحة جعلت PL/I معقدة، ويصعب تنفيذها بكفاءة، وأحيانًا تُفاجئ عند استخدامها. XPL هي لهجة صغيرة من اللغة الكاملة. تتميز XPL بميزة إضافية غير موجودة في PL/I: نوع بيانات STRING بأطوال ديناميكية. تُخزن قيم السلاسل النصية في مساحة ذاكرة منفصلة مخصصة للنصوص فقط، مع خاصية جمع البيانات المهملة للقيم القديمة تلقائيًا . إن جزءًا كبيرًا مما يفعله المترجم البسيط هو معالجة نص الإدخال وتدفقات البايتات الناتجة، لذا فإن هذه الميزة تساعد في تبسيط المترجمات القائمة على XPL.

عناصر

إكس كوم

مُترجم لغة XPL، المسمى XCOM ، هو مُترجم أحادي المرور يستخدم مُحللًا قائمًا على الجداول وتقنيات بسيطة لتوليد الشفرة . توجد إصدارات من XCOM لأنظمة معمارية مختلفة ، تستخدم وحدات توليد شفرة مكتوبة يدويًا لكل نظام. كان النظام المستهدف الأصلي هو IBM System/360 ، وهو مجموعة فرعية من IBM System/370 و IBM System/390 و IBM System z .

يُترجم برنامج XCOM من شفرة مصدرية مكتوبة بلغة XPL، ولكن بما أن XCOM نفسه مكتوب بلغة XPL، فإنه قادر على ترجمة نفسه - أي أنه مترجم ذاتي ، لا يعتمد على مترجمات أخرى. تمتلك العديد من اللغات الشهيرة مترجمات ذاتية، بما في ذلك Burroughs B5000 Algol وPL/I و C و LISP و Java . يُعد إنشاء مثل هذه المترجمات معضلة بيضة الدجاجة. تُنفذ اللغة أولاً بواسطة مترجم مؤقت مكتوب بلغة أخرى، أو حتى بواسطة مترجم فوري (غالباً ما يكون مترجماً فورياً لرمز وسيط، كما هو الحال في BCPL مع intcode أو O-code ).

بدأ برنامج XCOM كبرنامج مكتوب بلغة Algol يعمل على أجهزة Burroughs، حيث كان يترجم شفرة المصدر XPL إلى شفرة الآلة System/360. قام فريق XPL بتحويل شفرة المصدر Algol يدويًا إلى شفرة مصدر XPL. ثم جُمعت نسخة XPL من XCOM على أجهزة Burroughs، مما أدى إلى إنشاء نسخة XCOM ذاتية التجميع لأجهزة System/360. بعد ذلك، تم التخلي عن نسخة Algol، واقتصرت جميع التحسينات اللاحقة على نسخة XPL فقط. تُعرف هذه العملية باسم " تهيئة المُجمِّع ". ابتكر مطورو XPL مخطط "شاهد القبر" أو مخطط T لتوثيق عملية التهيئة.

إعادة توجيه المترجم لبنية جهاز جديدة هي عملية مماثلة، باستثناء أنه لا يلزم تغيير سوى وحدات توليد التعليمات البرمجية.

XCOM هو مُترجم أحادي المرور (مع عملية تصحيح للتعليمات البرمجية الصادرة للفروع الأمامية والحلقات وغيرها من الحالات المُحددة). يُصدر XCOM التعليمات البرمجية لكل عبارة عند التعرف على كل قاعدة نحوية داخلها، بدلاً من الانتظار حتى يُحلل الإجراء أو البرنامج بأكمله. لا توجد أشجار تحليل أو أي أشكال برمجية وسيطة أخرى مطلوبة، ولا تحسينات على مستوى الحلقة أو الإجراء. مع ذلك، يُجري XCOM تحسينًا جزئيًا . يتم ربط استجابة توليد التعليمات البرمجية لكل قاعدة نحوية بتلك القاعدة. قد يؤدي هذا النهج الفوري إلى تعليمات برمجية غير فعالة واستخدام غير فعال لسجلات الجهاز. يتم تعويض ذلك بكفاءة التنفيذ، وتحديدًا استخدام السلاسل الديناميكية المذكورة سابقًا: عند معالجة النص أثناء الترجمة، يتم تنفيذ عمليات السلاسل الفرعية بشكل متكرر. هذه العمليات سريعة مثل إسناد قيمة إلى عدد صحيح؛ ولا يتم نقل السلسلة الفرعية الفعلية. باختصار، إنه سريع، وسهل التدريس في دورة قصيرة، ويتناسب مع ذاكرة متوسطة الحجم، ويسهل تعديله للغات أو أجهزة مستهدفة مختلفة.

محلل

يحتوي مُترجم XCOM على ماسح معجمي مكتوب يدويًا ومحلل نحوي مُولّد آليًا. تُوصف بنية لغة الإدخال الخاصة بالمترجم (في هذه الحالة، XPL) بواسطة قواعد BNF مُبسّطة . تُحوّل أداة تحليل قواعد XPL، ANALYZER أو XA، هذه القواعد إلى مجموعة من جداول البيانات الكبيرة التي تصف جميع التركيبات الصحيحة لقواعد البنية وكيفية تمييزها. تُعاد خطوة توليد هذه الجداول فقط عند تغيير اللغة. عند تشغيل المُترجم، تُستخدم جداول البيانات هذه بواسطة خوارزمية تحليل نحوي صغيرة ومستقلة عن اللغة لتحليل لغة الإدخال والاستجابة لها. يُعد هذا النوع من المحللات النحوية القائمة على الجداول أسهل كتابةً بشكل عام من المحلل النحوي التنازلي المتكرر المكتوب يدويًا بالكامل . يستخدم XCOM طريقة تحليل نحوي تصاعدية ، حيث يُمكن للمُترجم تأجيل قراره بشأن قاعدة البنية التي صادفها حتى يرى نهاية العبارة. وهذا يتعامل مع نطاق أوسع من لغات البرمجة مقارنة بالأساليب التنازلية ، حيث يتعين على المترجم أن يخمن أو يلتزم بقاعدة بناء جملة محددة في وقت مبكر، عندما يكون قد رأى فقط الطرف الأيسر من العبارة.

وقت التشغيل

تتضمن لغة XPL مكتبة دعم أساسية لوقت التشغيل لتخصيص قيم السلاسل النصية في XPL وجمع البيانات المهملة. يجب تضمين شفرة المصدر لهذه المكتبة في كل برنامج تقريبًا مكتوب بلغة XPL.

هيكل عظمي

الجزء الأخير من نظام كتابة مُترجم XPL هو مُترجم تجريبي يُسمى SKELETON . وهو عبارة عن XCOM مُزود بجداول تحليل لقواعد نحوية تجريبية بسيطة بدلاً من قواعد XPL الكاملة. يُعد هذا المُترجم نقطة انطلاق لبناء مُترجم للغة جديدة، إذا كانت تلك اللغة تختلف اختلافًا كبيرًا عن XPL.

إكس مون

يُشغَّل برنامج XPL تحت سيطرة برنامج مراقبة يُدعى XMON ، وهو الجزء الوحيد الخاص بنظام التشغيل في هذا النظام، ويعمل كبرنامج تحميل لبرنامج XCOM نفسه أو أي برامج طُوِّرت باستخدام XCOM، كما يوفر ثلاثة أجهزة تخزين إضافية لاستخدام XCOM، ويتم الوصول إليها مباشرةً عن طريق رقم الكتلة. وقد صُمِّم برنامج XMON المنشور أصلاً ليكون مُحسَّناً لأجهزة IBM 2311s . ويتيح مُعامل XMON FILE= لبرنامج المراقبة استخدام أقراص أخرى ذات أحجام كتل أكبر بكفاءة. [ 4 ] وكان حجم كتلة قرص العمل ثابتًا وقت الترجمة في XCOM. [ 5 ]

استخدم برنامج XMON استراتيجية بسيطة للغاية للوصول المباشر إلى القرص. حيث كانت الدالة NOTE تُحدد عنوان مسار القرص، بينما كانت الدالة POINT تُحدد موقع مسار القرص التالي ليكون هو العنوان الذي أعادته الدالة NOTE سابقًا. وقد اعتُمدت هذه الاستراتيجية لتسهيل نقل برنامج XMON إلى أنظمة تشغيل أخرى، ولتجنب خيارات الوصول المباشر إلى القرص الأكثر تعقيدًا المتاحة آنذاك. [ 6 ]

لقد أدى تحويل XMON من استخدامه البدائي لعمليات NOTE و POINT و READ/WRITE على القرص - مع كتلة واحدة بالضبط لكل مسار - إلى EXCP (أي كتابة/إنشاء سجلات جديدة) و XDAP (أي قراءة/تحديث السجلات القديمة) - مع n كتلة لكل مسار، حيث يتم حساب n في وقت التشغيل من الخصائص الفيزيائية للجهاز المستهدف ويمكن أن يكون أكبر بكثير من 1 - إلى تحسين أداء التطبيق بشكل كبير وتقليل الحمل الزائد لنظام التشغيل.

على الرغم من أن XMON تم تطويره في الأصل لنظام التشغيل OS/360 ، إلا أنه (سواء كان التنفيذ الأصلي لـ NOTE و POINT و READ/WRITE؛ أو تحسين EXCP و XDAP) سيعمل على أنظمة تشغيل IBM التي تم إصدارها لاحقًا، بما في ذلك OS/370 و XA و OS/390 و z/OS ، بشكل عام دون أي تغييرات.

التحليل

استخدمت لعبة XCOM في الأصل طريقة تحليل تصاعدية قديمة تُسمى " أسبقية الاستراتيجية المختلطة" (MSP )، والتي ابتكرها فريق XPL (مع أن النسخة الرسمية تحتفظ بمحلل MSP ولا تتضمن "تحسينات التجسس" التي صدرت لاحقًا وأنواع البيانات الإضافية التي طُوّرت خارج فريق التنفيذ الأصلي ). يُعدّ MSP تعميمًا لطريقة تحليل الأسبقية البسيطة التي ابتكرها نيكلاوس ويرث للغة PL360 . وتُعدّ الأسبقية البسيطة بدورها تعميمًا لطرق أسبقية المعاملات البسيطة التي تعمل بكفاءة مع تعابير مثل A+B*(C+D)-E. تتضمن جداول MSP قائمة بالثلاثيات المتوقعة من رموز اللغة. وتزداد هذه القائمة حجمًا مع مكعب حجم القواعد، وتصبح كبيرة جدًا بالنسبة للغات البرمجة الكاملة النموذجية. كان من الصعب تركيب المترجمات المشتقة من XPL على الحواسيب الصغيرة في سبعينيات القرن الماضي ذات الذاكرة المحدودة. [ ملاحظة 1 ] كما أن MSP ليس قويًا بما يكفي للتعامل مع جميع القواعد المحتملة. لا ينطبق ذلك إلا عندما يستطيع مصمم اللغة تعديل تعريف اللغة ليتناسب مع قيود MSP، قبل أن يتم استخدام اللغة على نطاق واسع.

قامت جامعة تورنتو لاحقًا بتغيير XCOM وXA لاستخدام نسخة معدلة من طريقة دونالد كنوث لتحليل LR من الأسفل إلى الأعلى. [ ملاحظة 2 ] تُسمى نسخة XCOM المعدلة Simple LR أو SLR. وهي تدعم قواعد نحوية أكثر من MSP، ولكن ليس بنفس عدد قواعد LALR أو LR(1) الكامل . تكمن الاختلافات عن LR(1) في الغالب في خوارزميات مُولِّد الجداول، وليس في طريقة التحليل أثناء الترجمة. صدرت XCOM وXA قبل الانتشار الواسع لنظام Unix وأداة yacc لتوليد المحللات النحوية. تتشابه أغراض XA وyacc.

لغة XPL مفتوحة المصدر. تم توزيع نسخة System/360 من XPL عبر منظمة مستخدمي IBM SHARE . قامت مجموعات أخرى بنقل XPL إلى العديد من الأجهزة الأكبر حجماً في سبعينيات القرن الماضي. كما قامت مجموعات مختلفة بتوسيع XPL، أو استخدمتها لتنفيذ لغات برمجة أخرى متوسطة الحجم.

التطبيقات

تم استخدام لغة XPL لتطوير عدد من المترجمات للغات وأنظمة مختلفة.

الحالة الحالية

لا يزال يتم نقل لغة XPL إلى أجهزة الكمبيوتر الحديثة. تم إنشاء نسخة x86/ FreeBSD في عام 2000، [ 8 ] ونسخة x86/ Linux في عام 2015، ومترجم XPL إلى لغة C في عام 2017. [ 9 ] [ 10 ]

فهرس

  • ألكسندر، دبليو جي وورتمان، دي بي "الخصائص الثابتة والديناميكية لبرامج XPL". مجلة IEEE Computer نوفمبر 1975؛ 41-46.
  • أنكونا، ماسيمو، دوديرو، غابرييلا، ودورانتي، إركولي لويجي "تطوير البرمجيات المتقاطعة للمعالجات الدقيقة باستخدام نظام كتابة مترجم" وقائع المؤتمر الدولي الرابع لهندسة البرمجيات 1979: 399-402.
  • كامنيتزر، إس إتش "تشغيل XPL من IBM/360 إلى UNIVAC 1100." إشعارات ACM SIGPLAN مايو 1975: 14-20.
  • كارغر، بول أ. "تطبيق لغة XPL لـ Multics". أطروحة بكالوريوس العلوم. معهد ماساتشوستس للتكنولوجيا، 1972.
  • كلومب، آلان ر. "برمجيات رحلات محطة الفضاء: هال/إس أم آدا؟" مجلة الكمبيوتر مارس 1985: 20-28.
  • ليتش، جيفري وغولد، هيلموت. "تشغيل لغة XPL على جهاز كمبيوتر XDS Sigma 5." البرمجيات: الممارسة والخبرة 3 (1973): 235-244.
  • مكيمان، ويليام م.، هورنينج، جيمس ج.، وورتمان، ديفيد ب. مولد المترجمات. إنجلوود كليفس، نيوجيرسي: برنتيس هول، 1970.
  • ماكيمان، دبليو إم، وهورنينج، جيمس جيه، ونيلسون، إي سي، وورتمان، دي بي. "نظام مولد مترجم لغة XPL". وقائع مؤتمر AFIPS: مؤتمر الحاسوب المشترك لخريف 1968. واشنطن العاصمة: شركة تومسون للنشر. 1968: 617-635.
  • سيتون، غاري أ.، كيندريك، توماس أ.، وكاريك الابن، أ. جيل. "لغة PL/EXUS والآلة الافتراضية" وقائع ندوة ACM-IEEE حول هندسة الحاسوب عالية المستوى نوفمبر 1973: 124-130.
  • سليميك، جون "لغات تنفيذ الأنظمة الحالية: وجهة نظر أحد المستخدمين" وقائع ندوة SIGPLAN حول لغات تنفيذ الأنظمة، أكتوبر 1971: 20-28.
  • ستورم، مارك دبليو، وبولك، جيم أ. "استخدام نظام مولد المترجم القائم على XPL" وقائع المؤتمر الإقليمي السنوي الرابع عشر لجمعية ACM في جنوب شرق أبريل 1976: 19-26.
  • وورتمان، دي بي "قائمة بتطبيقات XPL." إشعارات ACM SIGPLAN يناير 1978: 70-74.

انظر أيضاً

ملحوظات

  1. في الواقع، باستخدام محلل مكتوب يدويًا يشبه محلل LALR وإجراء "تفكيك" فعال للغاية لجداول التحليل الناتجة، أمكن إنشاء محلل للغة XPL بأكملها على حاسوب صغير Z80 بتردد 2 ميجاهرتز ، بذاكرة داخلية ( DRAM ) سعتها 48 كيلوبايت فقط، وذاكرة خارجية ( قرص مرن ) سعتها 100 كيلوبايت فقط،يعمل بنظام CP/M . أُنجزت هذه النسخة عام 1980، ثم أُنجزت عملية نقلها إلى نظام MacOS (9، ثم X لاحقًا).
  2. لم تُنشر هذه النسخة للجمهور، وبالتالي فهي تبقى ملكية حصرية لمؤلفيها أو مؤسساتهم. وقد تجاهل مؤلفوها الطلبات المتكررة لتوزيع نسخة SLR(1) أو LALR(1) من XPL.

مراجع

  1. سليميك، جون (أكتوبر 1971). "لغات تنفيذ الأنظمة الحالية: وجهة نظر أحد المستخدمين" (ملف PDF) . إشعارات ACM SIGPLAN . 6 (9): 20-28 . doi : 10.1145/942596.807056 .
  2. شوستيك، لين (2016-08-02). "بكلماته الخاصة: غاري كيلدال" . شخصيات بارزة . متحف تاريخ الحاسوب .
  3. كيلدال، غاري آرلين (2016-08-02) [1993]. كيلدال، سكوت ؛ كيلدال، كريستين (محرران). "روابط الحاسوب: الأشخاص والأماكن والأحداث في تطور صناعة الحواسيب الشخصية" (ملف PDF) (مخطوطة، الجزء 1). عائلة كيلدال. مؤرشف (ملف PDF) من الأصل بتاريخ 2020-06-24 . تم الاطلاع عليه بتاريخ 2016-11-17 .
  4. مولد المترجمات، صفحة 251
  5. مولد المترجمات، صفحة 372
  6. مُولِّد المُترجمات، الملحق أ1،7
  7. "تطوير نظام Hal/S" . قسم علوم الحاسوب، جامعة تورنتو .
  8. بودنستاب، ديف. "الصفحة الرئيسية لديف بودنستاب (مؤرشفة)" . مؤرشفة من الأصل في 24 أبريل 2021. تم الاطلاع عليها في 13 سبتمبر 2024 .{{cite web}}: CS1 maint: bot: حالة عنوان URL الأصلي غير معروفة ( رابط )
  9. ويفر، دانيال إي. (21 نوفمبر 2017). "مترجم XPL: مترجم XPL إلى C" . سورس فورج . لا جولا ، كاليفورنيا: سلاش دوت ميديا . تم الاطلاع عليه في 6 ديسمبر 2017 .
  10. شوفوت (دانيال إي. ويفر) (21 نوفمبر 2017). "الإعلان عن الإصدار الأولي لمترجم XPL" . مجموعة الأخبار : comp.compilers . يوزنت: 17-11-001@comp.compilers . تم الاطلاع عليه في 6 ديسمبر 2017 .  
  • ماكيمان، ويليام مارشال؛ هورنينج، جيمس جيه؛ وورتمان، ديفيد بي، مولد مترجم (1971)، رقم ISBN 978-0-13-155077-3المرجع النهائي، بما في ذلك شفرة المصدر لجميع مكونات نظام XPL.