مترجم-مترجم

في علوم الحاسوب ، المترجم أو مولد المترجم هو أداة برمجة تقوم بإنشاء محلل نحوي أو مترجم أو مترجم من شكل من أشكال الوصف الرسمي للغة البرمجة والآلة.

يُطلق على النوع الأكثر شيوعًا من المترجمات اسم مولد المحلل النحوي . [ 1 ] وهو يتعامل فقط مع التحليل النحوي .

الوصف الرسمي للغة هو عادةً قواعد نحوية تُستخدم كمدخل لمولد محلل نحوي. غالبًا ما تشبه هذه القواعد صيغة باكوس-ناور (BNF) أو صيغة باكوس-ناور الموسعة (EBNF)، أو قد يكون لها تركيبها النحوي الخاص. تصف ملفات القواعد النحوية تركيب لغة البرمجة المستهدفة للمترجم المُولّد والإجراءات التي يجب اتخاذها تجاه بنياتها المحددة.

يُعاد الكود المصدري لمحلل لغة البرمجة كناتج لمولد المحلل. ويمكن بعد ذلك تجميع هذا الكود المصدري إلى محلل، قد يكون مستقلاً أو مضمناً. ثم يقبل المحلل المُجمَّع الكود المصدري للغة البرمجة المستهدفة كمدخل، وينفذ إجراءً ما أو يُخرج شجرة بناء جملة مجردة (AST).

لا تتعامل مولدات المحلل اللغوي مع دلالات شجرة بناء الجملة المجردة، أو مع توليد رمز الآلة للجهاز المستهدف. [ 2 ]

المُترجم الفائق هو أداة لتطوير البرمجيات تُستخدم بشكل أساسي في بناء المُترجمات والمترجمات الفورية للغات البرمجة الأخرى. [ 3 ] المدخلات إلى المُترجم الفائق هي برنامج حاسوبي مكتوب بلغة برمجة وصفية متخصصة ، مصممة أساسًا لغرض بناء المُترجمات. [ 3 ] [ 4 ] تُسمى لغة المُترجم الناتج لغة الكائن. الحد الأدنى من المدخلات اللازمة لإنتاج مُترجم هو برنامج وصفي يُحدد قواعد لغة الكائن والتحويلات الدلالية إلى برنامج كائن . [ 4 ] [ 5 ]

المتغيرات

يربط مولد المحلل النحوي النموذجي شيفرة قابلة للتنفيذ بكل قاعدة من قواعد النحو، والتي يجب تنفيذها عند تطبيق هذه القواعد بواسطة المحلل. تُعرف هذه الشيفرة أحيانًا باسم إجراءات العمل الدلالية، لأنها تُحدد دلالات البنية النحوية التي يُحللها المحلل. وبحسب نوع المحلل المطلوب توليده، قد تُنشئ هذه الإجراءات شجرة تحليل (أو شجرة بناء جملة مجردة )، أو تُولد شيفرة قابلة للتنفيذ مباشرةً.

تُعد META II واحدة من أقدم إصدارات المترجمات (1964)، والتي كانت قوية بشكل مدهش، والتي قبلت قواعد نحوية تحليلية مع مرافق إخراج تنتج رمز آلة المكدس، وهي قادرة على تجميع رمز المصدر الخاص بها ولغات أخرى.

كان من بين أوائل برامج إصدارات يونكس الأصلية التي طُوّرت في مختبرات بيل نظام lex و yacc ثنائي الأجزاء ، والذي كان يُستخدم عادةً لإخراج شيفرة لغة البرمجة C ، ولكنه كان يتمتع بنظام إخراج مرن يُمكن استخدامه لكل شيء بدءًا من لغات البرمجة وحتى تحويل ملفات النصوص . أما إصداراته الحديثة من GNU فهي flex و bison .

تستخدم بعض المترجمات التجريبية وصفًا رسميًا لدلالات لغة البرمجة كمدخلات، وعادةً ما تستخدم الدلالات التفسيرية . يُطلق على هذا النهج غالبًا اسم "الترجمة القائمة على الدلالات"، وقد كان بيتر موسيس رائدًا في نظام التنفيذ الدلالي (SIS) عام 1978. [ 6 ] مع ذلك، كان كل من المترجم الناتج والشيفرة التي ينتجها غير فعالين من حيث الوقت والمساحة. لا توجد حاليًا مترجمات إنتاجية مبنية بهذه الطريقة، لكن البحث مستمر.

مشروع مُترجم جودة الإنتاج ( PQCC ) في جامعة كارنيجي ميلون لا يُضفي طابعًا رسميًا على الدلالات، ولكنه يحتوي على إطار عمل شبه رسمي لوصف الآلة.

توجد المترجمات المترجمة بأشكال عديدة، بما في ذلك مولدات آلة إعادة الكتابة من الأسفل إلى الأعلى (انظر JBurg ) المستخدمة لتقسيم أشجار بناء الجملة وفقًا لقواعد إعادة الكتابة لتوليد التعليمات البرمجية، ومولدات محلل قواعد السمات (على سبيل المثال، يمكن استخدام ANTLR للتحقق من النوع المتزامن، ونشر الثوابت، والمزيد أثناء مرحلة التحليل).

المترجمات الفوقية

تُقلل المترجمات الفوقية من مهمة كتابة المترجمات من خلال أتمتة الجوانب المشتركة بغض النظر عن لغة البرمجة المستخدمة. وهذا يُتيح تصميم لغات خاصة بمجال معين ، تتناسب مع مواصفات مشكلة محددة. كما تُقلل المترجمات الفوقية من تكلفة إنتاج مترجمات لهذه اللغات الخاصة بمجال معين، إلى درجة تجعل من الممكن اقتصاديًا تضمين تصميم لغة خاصة بمجال معين في حل المشكلة . [ 4 ]

بما أن لغة المعالجة الوصفية للمترجم الفائق عادةً ما تكون لغة قوية لمعالجة السلاسل والرموز، فإنها غالبًا ما تُستخدم على نطاق واسع في التطبيقات العامة، بما في ذلك توليد مجموعة واسعة من أدوات هندسة البرمجيات والتحليل الأخرى. [ 4 ] [ 7 ]

إلى جانب فائدته في تطوير لغات خاصة بالمجال ، يعد المترجم الفائق مثالاً رئيسياً على لغة خاصة بالمجال، مصممة لمجال كتابة المترجمات.

المترجم الفائق هو برنامج وصفي يُكتب عادةً بلغة وصفية خاصة به أو بلغة برمجة حاسوبية موجودة. وتُعادل عملية ترجمة المترجم الفائق، المكتوب بلغته الوصفية الخاصة، لنفسه، عملية الترجمة الذاتية الاستضافة . ومعظم المترجمات الشائعة اليوم هي مترجمات ذاتية الاستضافة. وتُعدّ الاستضافة الذاتية أداةً فعّالة للعديد من المترجمات الفائقة، إذ تُتيح توسيع لغتها الوصفية بسهولة. والميزة التي تُميّز المترجم الفائق عن غيره من المترجمات هي أنه يأخذ كمدخل لغة وصفية متخصصة تصف جميع جوانب عمل المترجم. والبرنامج الوصفي الناتج عن المترجم الفائق هو برنامج كامل تمامًا كبرنامج مكتوب بلغة C++ أو BASIC أو أي لغة برمجة عامة أخرى. وتُعدّ اللغة الوصفية للبرمجة سمةً قوية تُسهّل تطوير لغات البرمجة الحاسوبية وأدوات الحاسوب الأخرى. ويمكن برمجة معالجات سطر الأوامر، وتحويل وتحليل السلاسل النصية بسهولة باستخدام اللغات الوصفية للبرمجة الخاصة بالمترجمات الفائقة.

تتضمن حزمة التطوير الكاملة رابطًا ومكتبة دعم وقت التشغيل . عادةً ما تُستخدم لغة برمجة نظامية موجهة نحو الآلة ، مثل C أو C++، لكتابة مكتبة الدعم. وتكتمل حزمة المترجم الفائق عادةً بمكتبة تتكون من وظائف الدعم اللازمة لعملية التجميع.

معنى المترجم الفائق

في علوم الحاسوب، يُستخدم مصطلح "ميتا" عادةً للدلالة على فئةٍ مُستقلة . على سبيل المثال، البيانات الوصفية هي بيانات تصف بيانات أخرى. واللغة التي تُستخدم لوصف لغات أخرى تُسمى لغة وصفية . قد تعني "ميتا" أيضًا مستوىً أعلى من التجريد . تعمل اللغة الوصفية على مستوىً أعلى من التجريد لوصف خصائص لغة ما. صيغة باكوس-ناور (BNF) هي لغة وصفية رسمية استُخدمت في الأصل لتعريف لغة ALGOL 60. تُعتبر BNF لغة وصفية ضعيفة ، لأنها تصف بناء الجملة فقط ولا تُشير إلى الدلالات أو المعنى. البرمجة الوصفية هي كتابة برامج حاسوبية مع القدرة على التعامل مع البرامج كبيانات. يأخذ المُترجم الوصفي كمدخل برنامجًا وصفيًا مكتوبًا بلغة وصفية مُتخصصة (مستوى تجريد أعلى) مُصممة خصيصًا لغرض البرمجة الوصفية. [ 4 ] [ 5 ] ويكون الناتج برنامجًا تنفيذيًا.

يمكن إجراء مقارنة: فكما يأخذ مترجم لغة C++ برنامج لغة برمجة C++ كمدخل ، يأخذ المترجم الفوقي برنامج لغة برمجة فوقية كمدخل .

مترجم فورث الفائق

يُطلق العديد من مؤيدي لغة فورث على عملية إنشاء تطبيق جديد لها اسم "الترجمة الفوقية"، ويُعتبر هذا التطبيق بمثابة "مترجم فوقي". تعريف المترجم الفوقي في لغة فورث هو:

"المترجم الفائق هو مترجم يقوم بمعالجة شفرة المصدر الخاصة به، مما ينتج عنه نسخة قابلة للتنفيذ من نفسه."

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

عندما يقوم (المترجم ذاتي الاستضافة) X بمعالجة شفرة المصدر الخاصة به، مما ينتج عنه نسخة قابلة للتنفيذ من نفسه، فإن X هو مترجم ميتا.

استبدل X بأي لغة برمجة شائعة، مثل C أو C++ أو Java أو Pascal أو COBOL أو Fortran أو Ada أو Modula-2 ، إلخ. وبذلك، يصبح X مُترجمًا فوقيًا (metacompiler) وفقًا لتعريف المُترجم الفوقي في لغة Forth. يعمل المُترجم الفوقي على مستوى تجريدي أعلى من المُترجم الذي يُترجمه، ولا يعمل على نفس مستوى المُترجم المُستضاف ذاتيًا إلا عند ترجمة نفسه. يجب الانتباه إلى مشكلة هذا التعريف للمُترجم الفوقي، إذ يُمكن تطبيقه على معظم لغات البرمجة.

مع ذلك، عند دراسة مفهوم البرمجة في لغة فورث، نجد أن إضافة كلمات جديدة إلى القاموس، وتوسيع اللغة بهذه الطريقة، يُعدّ برمجةً فوقية. هذه البرمجة الفوقية في فورث هي ما يجعلها مترجمًا فوقيًا.

البرمجة بلغة فورث تعني إضافة كلمات جديدة إليها. ويُطلق على تغيير اللغة بهذه الطريقة اسم البرمجة الوصفية . فورث هي مُترجم وصفي، لأنها لغة مصممة خصيصًا للبرمجة الوصفية. البرمجة بلغة فورث تعني توسيعها، فإضافة كلمات إلى مفرداتها يُنشئ لهجة جديدة منها . فورث مُترجم وصفي مُتخصص للهجات لغة فورث.

تاريخ

بدأ توني بروكر وديريك موريس تصميم المترجم-المترجم الأصلي عام 1959، وبدأت الاختبارات الأولية في مارس 1962. [ 8 ] استُخدم مترجم بروكر موريس (BMCC) لإنشاء مترجمات لحاسوب أطلس الجديد في جامعة مانشستر ، لعدة لغات برمجة: ميركوري أوتوكود ، وإكستندد ميركوري أوتوكود، وأطلس أوتوكود ، وألغول 60 ، وإيه إس إيه فورتران . في نفس الفترة تقريبًا، كان إي تي (نيد) آيرونز يعمل في جامعة برينستون، وأليك غليني في مؤسسة أبحاث الأسلحة الذرية في ألدرماستون، وقد ألهمت ورقته البحثية "آلة بناء الجملة" (التي رُفعت عنها السرية عام 1977) سلسلة أنظمة كتابة المترجمات META المذكورة أدناه.

يرتبط التاريخ المبكر للمترجمات الفائقة ارتباطًا وثيقًا بتاريخ مجموعة العمل الأولى التابعة لمجموعة SIG/PLAN والمعنية بالمترجمات الموجهة بالبنية النحوية. وقد تأسست هذه المجموعة بشكل أساسي بفضل جهود هوارد ميتكالف في منطقة لوس أنجلوس. [ 9 ] في خريف عام 1962، صمم هوارد ميتكالف مترجمين لكتابة المترجمات. استخدم أحدهما أسلوب تحليل من الأسفل إلى الأعلى استنادًا إلى طريقة وصفها ليدلي وويلسون. [ 10 ] بينما استخدم الآخر منهجًا من الأعلى إلى الأسفل استنادًا إلى عمل غليني لتوليد جمل إنجليزية عشوائية من قواعد نحوية خالية من السياق . [ 11 ]

في الوقت نفسه، وصف فال شور آلتين "فوقيتين"، إحداهما توليدية والأخرى تحليلية. تم تنفيذ الآلة التوليدية وأنتجت تعابير جبرية عشوائية. نفّذ شور أول مترجم فوقي، وهو Meta I، على جهاز IBM 1401 في جامعة كاليفورنيا في لوس أنجلوس في يناير 1963. كُتبت مترجماته وآلاته الفوقية الأصلية مباشرةً بلغة شبه آلية. أما META II ، فقد كُتبت بلغة فوقية عالية المستوى قادرة على وصف عملية ترجمتها إلى اللغة شبه الآلية. [ 12 ] [ 13 ] [ 14 ]

قام لي شميدت في شركة بولت، بيرانيك، ونيومان بكتابة مترجم فائق في مارس 1963 استخدم شاشة CRT على جهاز PDP-1 ذي المشاركة الزمنية. [ 15 ] أنتج هذا المترجم رمز الآلة الفعلي بدلاً من الرمز التفسيري، وتم تشغيله جزئيًا من Meta I.

قام شور بتطوير Meta II من Meta I خلال ربيع عام 1963. وتُعدّ الورقة البحثية التي قُدّمت في مؤتمر ACM في فيلادلفيا عام 1964 حول نظام المترجم الفائق المُحسّن أول ورقة بحثية متاحة كمرجع عام حول المترجم الفائق. وقد أرست بنية نظام شور وتقنية تنفيذه الأساس لمعظم الأنظمة التي تلته. تم تنفيذ النظام على جهاز 1401 صغير، واستُخدم لتنفيذ لغة برمجة صغيرة شبيهة بلغة ALGOL .

تبع ذلك العديد من الأنظمة المماثلة على الفور.

قام روجر روتمان من شركة AC Delco بتطوير وتنفيذ LOGIK، وهي لغة لمحاكاة التصميم المنطقي، على جهاز IBM 7090 في يناير 1964. [ 16 ] استخدم هذا المترجم خوارزمية أنتجت رمزًا فعالًا للتعبيرات المنطقية.

تصف ورقة بحثية أخرى في وقائع مؤتمر ACM لعام 1964 برنامج Meta III ، الذي طوره شنايدر وجونسون في جامعة كاليفورنيا في لوس أنجلوس (UCLA) لجهاز IBM 7090. [ 17 ] يُمثل Meta III محاولةً لإنتاج شفرة آلية فعّالة لمجموعة واسعة من اللغات. تم تنفيذ Meta III بالكامل بلغة التجميع. كُتب مُترجمان بلغة Meta III، وهما CODOL، وهو مُترجم تجريبي لكتابة المُترجمات، وPUREGOL، وهي لهجة من لغة ALGOL 60. (كان من الوقاحة تسميتها ALGOL).

في أواخر عام 1964، قام لي شميدت بتطوير برنامج EQGEN، وهو برنامج تجميعي، من جهاز PDP-1 إلى جهاز Beckman 420. وكان EQGEN لغة لتوليد المعادلات المنطقية.

في عام ١٩٦٤، بدأت شركة تطوير الأنظمة (SDC) جهودًا حثيثة لتطوير المترجمات الفائقة. شملت هذه الجهود مترجمين فائقين قويين، هما Book1 وBook2، مكتوبين بلغة Lisp، يتمتعان بقدرات بحث شجرية واسعة النطاق وإمكانية النسخ الاحتياطي. يُعدّ Meta 5 نتاجًا لأحد أنظمة Q-32 في SDC. [ ١٨ ] يشتمل نظام Meta 5 على نسخ احتياطي لتدفق الإدخال، بالإضافة إلى العديد من الميزات الأخرى اللازمة لتحليل أي لغة حساسة للسياق. وقد تم إطلاق هذا النظام بنجاح لعدد كبير من المستخدمين، ووفر العديد من تطبيقات معالجة السلاسل النصية إلى جانب الترجمة. يحتوي النظام على العديد من مكدسات الدفع السفلية المعقدة، وميزات ضبط السمات واختبارها، وآليات إخراج متقدمة. إن نجاح Meta 5 في ترجمة برامج JOVIAL إلى برامج PL/I يُبرهن على قوته ومرونته.

ابتكر روبرت ماكلور في شركة تكساس إنسترومنتس مُترجمًا برمجيًا يُسمى TMG (عُرض عام 1965). استُخدم TMG لإنشاء مُترجمات برمجية مبكرة للغات برمجة مثل B و PL/I و ALTRAN . إلى جانب المُترجم الفوقي لفال شور، شكّل TMG مصدر إلهام مبكر للفصل الأخير من كتاب دونالد كنوث " فن برمجة الحاسوب" . [ 19 ]

تم تطوير نظام LOT خلال عام 1966 في معهد ستانفورد للأبحاث، وقد تم تصميمه بشكل وثيق للغاية على غرار Meta II. [ 20 ] وقد احتوى على بنيات جديدة ذات أغراض خاصة تسمح له بإنشاء مترجم يمكنه بدوره ترجمة مجموعة فرعية من PL/I. امتلك هذا النظام إمكانيات واسعة لجمع الإحصاءات، واستُخدم لدراسة خصائص التحليل من أعلى إلى أسفل.

SIMPLE هو نظام ترجمة متخصص مصمم للمساعدة في كتابة المعالجات المسبقة للغة PL/I، ويتكون SIMPLE، المكتوب بلغة PL/I، من ثلاثة مكونات: مُنفِّذ، ومحلل نحوي، ومنشئ دلالي. [ 21 ]

طُوِّر مُترجم TREE-META في معهد ستانفورد للأبحاث في مينلو بارك، كاليفورنيا، في أبريل 1968. تاريخ المترجمات الفوقية المبكرة موثق جيدًا في دليل TREE -META. وقد واكب TREE-META بعض تطورات SDC. وعلى عكس المترجمات الفوقية السابقة، فصل معالجة الدلالات عن معالجة بناء الجملة. احتوت قواعد بناء الجملة على عمليات بناء شجرية تجمع بين عناصر اللغة المُتعرَّف عليها وعُقد الشجرة. ثم عُولج تمثيل بنية الشجرة للمُدخلات بواسطة شكل بسيط من قواعد فك التحليل. استخدمت قواعد فك التحليل التعرُّف على العُقد واختبار السمات، وعند التطابق، يُنفَّذ الإجراء المُناسب. بالإضافة إلى ذلك، يُمكن اختبار عنصر الشجرة نفسه في قاعدة فك التحليل. كانت قواعد فك التحليل أيضًا لغةً تكرارية، حيث يُمكن استدعاء قواعد فك التحليل مع تمرير عناصر الشجرة قبل تنفيذ إجراء قاعدة فك التحليل.

إن مفهوم الآلة الفائقة الذي طرحه غليني في الأصل بسيط للغاية لدرجة أنه تم تصميم ثلاثة نماذج مادية، ونُفذ أحدها بالفعل. وقد تم تنفيذ النموذج الأخير في جامعة واشنطن في سانت لويس. بُنيت هذه الآلة من مكونات معيارية كبيرة، وتستخدم التعليمات البرمجية التي وصفها شور.

يُعدّ CWIC (مترجم لكتابة وتنفيذ المترجمات) آخر مترجم شور الفائق المعروف. طُوّر في شركة تطوير الأنظمة بواسطة إروين بوك، وديوي فال شور، وستيفن جيه شيرمان. وبفضل الإمكانيات الكاملة للغة معالجة القوائم (ليسب 2)، تمكّنت خوارزميات التحسين من العمل على القوائم والأشجار المُولّدة نحويًا قبل توليد الشفرة. كما احتوى CWIC على جدول رموز مُدمج في اللغة.

مع عودة ظهور اللغات الخاصة بالمجال والحاجة إلى مولدات المحللات التي يسهل استخدامها وفهمها وصيانتها، أصبحت المترجمات الفوقية أداة قيّمة لمشاريع هندسة البرمجيات المتقدمة.

من الأمثلة الأخرى على مولدات المحللات اللغوية المشابهة لـ yacc: ANTLR و Coco/R [ 22 ] و CUP و GNU Bison و Eli [ 23 ] و FSL و SableCC و SID (جهاز تحسين بناء الجملة) [ 24 ] و JavaCC . مع أن مولدات المحللات اللغوية البحتة مفيدة، إلا أنها لا تعالج سوى جزء التحليل اللغوي من مشكلة بناء المترجم. أما الأدوات ذات النطاق الأوسع، مثل PQCC و Coco/R و DMS Software Reengineering Toolkit، فتُقدم دعمًا كبيرًا لأنشطة ما بعد التحليل اللغوي الأكثر تعقيدًا، مثل التحليل الدلالي وتحسين الكود وتوليده.

لغات وصفية Schorre

طُوِّرت أولى مُترجمات شور الفوقية، META I وMETA II، على يد د. فال شور في جامعة كاليفورنيا في لوس أنجلوس. وتلتها مُترجمات فوقية أخرى مبنية على شور، أضاف كل منها تحسينات على تحليل اللغة و/أو توليد الشفرة.

في البرمجة، من الشائع استخدام اسم لغة البرمجة للإشارة إلى كلٍّ من المُصرِّف ولغة البرمجة، ويُحدِّد السياق المعنى. يُصرَّف برنامج C++ باستخدام مُصرِّف C++. وينطبق هذا أيضًا على ما يلي. على سبيل المثال، META II هو المُصرِّف واللغة معًا.

اللغات الوصفية في سلسلة Schorre من المترجمات الوصفية هي لغات برمجة وظيفية تستخدم قواعد نحوية من أعلى إلى أسفل لتحليل معادلات بناء الجملة التي تحتوي على بنيات تحويل الإخراج المضمنة.

معادلة نحوية:

<الاسم> = <الجسم>؛

هي دالة اختبار مُجمّعة تُرجع إما نجاحًا أو فشلًا . <name> هو اسم الدالة. <body> هو شكل من أشكال التعبير المنطقي يتألف من اختبارات قد تكون مُجمّعة، ولها بدائل، وتُخرج قواعد إنتاج. يُشبه الاختبار قيمة منطقية (bool) في لغات البرمجة الأخرى، حيث يكون النجاح صحيحًا والفشل خاطئًا .

يُعدّ تعريف لغة البرمجة تحليليًا من أعلى إلى أسفل أمرًا طبيعيًا. على سبيل المثال، يمكن تعريف برنامج ما على النحو التالي:

البرنامج = $التصريح؛ 

تعريف البرنامج على أنه سلسلة من صفر أو أكثر من التصريحات.

في لغات Schorre META X ، توجد قاعدة أساسية. قاعدة البرنامج المذكورة أعلاه مثال على هذه القاعدة. قاعدة البرنامج عبارة عن دالة اختبار تستدعي تعريفًا، وهو قاعدة اختبار ، تُرجع إما نجاحًا أو فشلًا . يقوم عامل التكرار $ باستدعاء التعريف بشكل متكرر حتى يُرجع فشلًا . عامل التكرار $ ناجح دائمًا، حتى في حالة عدم وجود أي تعريف. سيُرجع البرنامج أعلاه دائمًا نجاحًا. (في CWIC، يمكن للفشل الطويل تجاوز التعريف. الفشل الطويل جزء من نظام التراجع في CWIC).

كانت مجموعات الأحرف في هذه المترجمات المبكرة محدودة. استُخدم الحرف / للدلالة على عامل التناوب (أو). تُكتب عبارة "A or B" على النحو التالي: A / B. تُستخدم الأقواس ( ) للتجميع.

أ (ب / ج)

يصف هذا التركيب المكون من A متبوعًا بـ B أو C. ويمكن تمثيله كتعبير منطقي كالتالي:

أ وأو ج)

يحمل التسلسل XY معنىً ضمنيًا لكل من X و Y. الأقواس ( ) هي أدوات تجميع، و / هي عامل " أو" . يكون ترتيب التقييم دائمًا من اليسار إلى اليمين، حيث يتم تحديد تسلسل الأحرف المدخلة من خلال ترتيب الاختبارات.

تُستخدم كلمات المعاملات الخاصة التي تبدأ بنقطة (.) للتوضيح. ويُستخدم .EMPTY كبديل أخير عندما لا يكون هناك حاجة لوجود بديل سابق.

X (A / B / .EMPTY)

يشير هذا إلى أن X قد يتبعه A أو B اختياريًا. هذه سمة مميزة للغات الوصفية هذه باعتبارها لغات برمجة. ويتجنب ما سبق التراجع. قد تكون أنظمة بناء المترجمات الأخرى قد حددت التسلسلات الثلاثة الممكنة وتركت للمحلل اللغوي مهمة تحديدها.

تتشابه خصائص لغات البرمجة الوصفية المذكورة أعلاه مع جميع مترجمات Schorre الوصفية وتلك المشتقة منها.

ميتا ١

كان META I عبارة عن مترجم برمجي يدوي يستخدم لتجميع META II. لا يُعرف الكثير عن META I باستثناء أن التجميع الأولي لـ META II أنتج رمزًا مطابقًا تقريبًا لرمز مترجم META I اليدوي.

ميتا 2

تتألف كل قاعدة اختيارياً من اختبارات، وعوامل تشغيل، وقواعد إنتاج. تحاول القاعدة مطابقة جزء من سلسلة أحرف مصدر برنامج الإدخال، وتُرجع نتيجة نجاح أو فشل. في حالة النجاح، يتم التقدم في الإدخال فوق الأحرف المطابقة. في حالة الفشل، لا يتم التقدم في الإدخال.

أنتجت عمليات الإنتاج شكلاً من أشكال كود التجميع مباشرة من قاعدة بناء الجملة.

ميتا 3

يُعدّ META III تطورًا لـ META II، وقد طوّره فريدريك دبليو شنايدر وجلين دي جونسون. تُدفع المعرّفات والسلاسل والأرقام المتطابقة، وما إلى ذلك، إلى مكدس المعاملات، وتُضاف عوامل تشغيل جديدة لمعالجتها حسب الحاجة. يُمكّن استخدام قائمة انتظار FIFO صريحة مع مكدس المعاملات من إجراء عمليات معقدة على المعاملات، مثل التحويل من البحث العميق أولًا إلى البحث العرضي أولًا. يوجد جدول رموز صريح، بالإضافة إلى عوامل تشغيل لتحريره والاستعلام عنه. وأخيرًا، يوجد مفهوم لتتبع السجلات مُزاح لتسهيل إنشاء تسلسلات معالجة السجلات المثلى.

ميتا الشجرة

قدّمت TREE-META مُعاملات بناء الشجرة : < اسم_العقدة > و [ < الرقم > ] ، لنقل تحويلات الإنتاج الناتجة إلى قواعد غير مُحلَّلة. استُخدمت مُعاملات بناء الشجرة في قواعد النحو لتحويل المُدخلات مباشرةً إلى شجرة بناء جملة مجردة . قواعد التحليل غير المُحلَّل هي أيضًا دوال اختبار تُطابق أنماط الشجرة. تُستدعى قواعد التحليل غير المُحلَّل من قاعدة نحوية عند تحويل شجرة بناء جملة مجردة إلى كود مُخرَج. سمح بناء شجرة بناء جملة مجردة وقواعد التحليل غير المُحلَّل بإجراء تحسينات محلية من خلال تحليل شجرة التحليل.

أدى نقل عمليات الإنتاج إلى قواعد فك التحليل إلى فصل واضح بين تحليل القواعد وإنتاج التعليمات البرمجية. وقد جعل هذا البرمجة أسهل في القراءة والفهم.

CWIC

في الفترة ما بين عامي 1968 و1970، قام كل من إروين بوك، وديوي فال شور، وستيفن جيه شيرمان بتطوير برنامج CWIC. [ 4 ] (مترجم لكتابة وتنفيذ المترجمات) في شركة تطوير الأنظمة، معهد تشارلز باباج، مركز تاريخ تكنولوجيا المعلومات (الصندوق 12، المجلد 21) .

CWIC هو نظام لتطوير المترجمات يتألف من ثلاث لغات متخصصة، كل منها مصممة لوصف جوانب محددة من الترجمة بطريقة مباشرة. تُستخدم لغة بناء الجملة لوصف عملية التعرف على النص المصدر وبناء بنية شجرية وسيطة منه . أما لغة المولد فتُستخدم لوصف تحويل هذه البنية الشجرية إلى لغة الكائن المناسبة.

تتبع لغة بناء الجملة هذه خط ديوي فال شور السابق من المترجمات الفوقية. وهي تشبه إلى حد كبير لغة TREE-META، إذ تحتوي على عوامل بناء الشجرة في لغة بناء الجملة. وقد تم توسيع قواعد فك التحليل في TREE-META لتتوافق مع لغة المولدات القائمة على الكائنات والمبنية على LISP 2 .

تتضمن CWIC ثلاث لغات:

  • بناء الجملة : يحوّل مدخلات البرنامج المصدر إلى هياكل قوائم باستخدام صيغة تحويل القواعد. يتم تمرير بنية التعبير المُحللة إلى مُولِّد عن طريق وضع استدعاء المُولِّد في قاعدة. تُمثَّل الشجرة بقائمة يكون عنصرها الأول كائن عقدة. تحتوي اللغة على عاملين، < و > ، مُخصَّصين لإنشاء القوائم. يُستخدم عامل النقطتين : لإنشاء كائنات العقدة. :ADD يُنشئ عقدة ADD. يجمع عامل التعجب ! عددًا من الإدخالات المُحللة مع عقدة لإنشاء شجرة. تُمرَّر الأشجار التي تم إنشاؤها بواسطة قواعد بناء الجملة إلى دوال المُولِّد، مُعيدًا النجاح أو الفشل. لغة بناء الجملة قريبة جدًا من TREE-META. يستخدم كلاهما النقطتين لإنشاء عقدة.  يعمل عامل التعجب !<number> في CWIC لبناء الشجرة بنفس طريقة عمل [<number>] في TREE-META.
  • المولد : سلسلة مُسماة من قواعد التحويل، تتكون كل منها من قاعدة فك التحليل، وقاعدة مطابقة الأنماط، وقاعدة إنتاج الإخراج المكتوبة بلغة شبيهة بلغة LISP 2. تمت الترجمة إلى رمز الآلة الثنائي IBM 360. تُعمم ميزات أخرى للغة المولد الإخراج. [ 4 ]
  • MOL-360 : لغة تنفيذ متوسطة المستوى مستقلةلعائلة أجهزة الكمبيوتر IBM System/360 تم تطويرها في عام 1968 وتستخدم لكتابة مكتبة الدعم الأساسية.

لغة المولدات

كانت لغة المولدات تتمتع بدلالات مشابهة للغة ليسب . كان يُنظر إلى شجرة التحليل على أنها قائمة متكررة. الشكل العام لدالة في لغة المولدات هو:

 اسم الدالة (قاعدة فك التحليل الأولى) => مولد كود الإنتاج الأول (second-unparse_rule) => second-production_code_generator (قاعدة_فك_التحليل_الثالثة) => مولد_كود_الإنتاج_الثالث ...

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

 expr_gen(ADD[expr_gen(x),expr_gen(y)]) => <AR + (x*16)+y;> releasereg(y); أعد x؛ (SUB[expr_gen(x),expr_gen(y)])=> <SR + (x*16)+y;> releasereg(y); أعد x؛ (MUL[expr_gen(x),expr_gen(y)])=> . . . (x)=> r1 = getreg(); تحميل(r1، x)؛ أعد r1؛ ...

أي، إذا كانت شجرة التحليل تبدو كالتالي (ADD[<something1>,<something2>])، فسيتم استدعاء expr_gen(x) مع <something1> وإرجاع x. المتغير في قاعدة فك التحليل هو متغير محلي يمكن استخدامه في مولد كود الإنتاج. يتم استدعاء expr_gen(y) مع <something2> وإرجاع y. هنا، يتم تمرير العنصر في الموضع الذي يشغله إلى استدعاء المولد في قاعدة فك التحليل. من المفترض أن يكون x و y في المثال أعلاه عبارة عن سجلات عند الإرجاع. يهدف التحويل الأخير إلى تحميل قيمة ذرية في سجل وإرجاع هذا السجل. سيتم استخدام الإنتاج الأول لإنشاء تعليمة "AR" (إضافة سجل) 360 بالقيم المناسبة في السجلات العامة. المثال أعلاه هو جزء فقط من مولد. يتم تقييم كل تعبير مولد إلى قيمة يمكن معالجتها لاحقًا. كان من الممكن كتابة التحويل الأخير على النحو التالي:

 (x)=> return load(getreg(), x); 

في هذه الحالة، تُعيد الدالة load مُعاملها الأول، وهو السجل الذي تُعيده الدالة getreg(). تُعتبر الدالتان load و getreg من مولدات CWIC الأخرى.

من مؤلفي كتاب CWIC:

يُسهّل المُترجم الفائق عملية بناء المُترجمات من خلال أتمتة جوانبها غير الإبداعية، أي تلك الجوانب التي تبقى ثابتة بغض النظر عن اللغة التي سيُترجمها المُترجم. وهذا يُتيح تصميم لغات مُلائمة لمواصفات مشكلة مُحددة. كما يُقلل من تكلفة إنتاج مُعالجات لهذه اللغات إلى درجة تجعل من المُجدي اقتصاديًا البدء في حل المشكلة من خلال تصميم اللغة. [ 4 ]

أمثلة

انظر أيضاً

المراجع والملاحظات

  1. المترجمات  : المبادئ والتقنيات والأدوات . ألفريد ف. أهو، مونيكا س. لام، رافي سيثي، جيفري د. أولمان، ألفريد ف. أهو (  الطبعة الثانية). بوسطن. 2007. ص  287. ISBN 978-0-321-48681-3. OCLC 70775643 . {{cite book}}: صيانة CS1: موقع الناشر مفقود ( رابط ) صيانة CS1: أخرى ( رابط )
  2. "مترجم موجه نحو بناء الجملة للغة ALGOL 60" إدغار تي. آيرونز، اتصالات ACM المجلد 4 العدد 1، يناير 1961.
  3. ١ ٢ المُترجم الفائق: ( علوم الحاسوب ) مُترجم يُستخدم بشكل أساسي لإنشاء مُترجمات للغات برمجة أخرى. "قاموس ماكجرو هيل للمصطلحات العلمية والتقنية، الطبعة السادسة" . شركة ماكجرو هيل. مؤرشف من الأصل بتاريخ ٧ أبريل ٢٠١٨. تم الاطلاع عليه بتاريخ ٧ أبريل ٢٠١٨ .
  4. ١ ٢ ٣ ٤ ٥ ٦ ٧ ٨ بوك، إروين؛ ديوي فال شور؛ ستيفن ج. شيرمان (يونيو ١٩٧٠). "نظام CWIC/36O، مُترجم لكتابة وتنفيذ المُترجمات". إشعارات ACM SIGPLAN . ٥ (٦): ١١-٢٩ . doi : 10.1145/954344.954345 . S2CID ٤٤٦٧٥٢٤٠ . 
  5. 1 2 C. Stephen Carr, David A. Luther, Sherian Erdmann, The TREE-META Compiler-Compiler System: A Meta Compiler System for the Univac 1108 and General Electric 645 , University of Utah Technical Report RADC-TR-69-83.
  6. بيتر موسيس، "SIS: نظام مُترجم-مولد باستخدام الدلالات التوضيحية"، التقرير 78-4-3، قسم علوم الحاسوب، جامعة آرهوس، الدنمارك، يونيو 1978
  7. الجيران، بناء برمجيات JM باستخدام المكونات . مؤرشف بتاريخ 18-03-2018 في Wayback Machine . التقرير الفني رقم 160، قسم علوم المعلومات والحاسوب، جامعة كاليفورنيا، إرفاين، 1980.
  8. لافينغتون، سيمون (أبريل 2016). "توني بروكر ومترجم أطلس" (ملف PDF) . مؤرشف (PDF) من الأصل بتاريخ 26 مارس 2023. تم الاطلاع عليه بتاريخ 29 سبتمبر 2023 .
  9. هوارد ميتكالف، "مترجم مُعَلم قائم على اللغويات الميكانيكية"، شركة أبحاث التخطيط R-311، 1 مارس 1963، وأيضًا في المراجعة السنوية للبرمجة الآلية، المجلد 4
  10. روبرت ليدلي وجيه بي ويلسون، "البرمجة الآلية، ترجمة اللغة من خلال التحليل النحوي"، اتصالات رابطة آلات الحوسبة، المجلد 5، العدد 3، الصفحات 145-155، مارس 1962.
  11. AE Glennie، "حول آلة بناء الجملة وبناء جهاز كمبيوتر عالمي"، التقرير الفني رقم 2، AD 240–512، مركز الحوسبة، معهد كارنيجي للتكنولوجيا، 1960.
  12. شور، دي في، ميتا 2 لغة كتابة مترجمات موجهة نحو بناء الجملة ، وقائع المؤتمر الوطني التاسع عشر لجمعية آلات الحوسبة لعام 1964، الصفحات 41.301-41.3011، 1964
  13. ديوي، فال شور (1963). "لغة SMALGOL موجهة نحو بناء الجملة لجهاز 1401". المؤتمر الوطني لجمعية ACM، دنفر، كولورادو .
  14. تم وصف Meta I في الورقة المقدمة في مؤتمر ACM في كولورادو عام 1963. انظر SMALGOL.
  15. LO Schmidt، "The Status Bitt ACM SegPlan "Special Interest Group on Programming Languages" Working Group 1 News Letter، 1964.
  16. روجر روتمان، "LOGIK. مُترجم موجه نحو بناء الجملة لمحاكاة وقت البت للكمبيوتر"، رسالة ماجستير، جامعة كاليفورنيا في لوس أنجلوس، أغسطس 1964.
  17. إف دبليو شنايدر وجي دي جونسون، "مترجم موجه نحو بناء الجملة، مترجم لكتابة التعليمات البرمجية لتوليد رمز فعال"، وقائع المؤتمر الوطني التاسع عشر لرابطة آلات الحوسبة، 1964
  18. D. Oppenheim و D. Haggerty، "META 5: أداة لمعالجة سلاسل البيانات"، وقائع المؤتمر الوطني الحادي والعشرين لجمعية آلات الحوسبة، 1966.
  19. كنوت، دونالد (1990). "نشأة قواعد السمات" (ملف PDF) . في: ب. ديرانسارت؛ م. جوردان (محرران). وقائع المؤتمر الدولي حول قواعد السمات وتطبيقاتها (باريس، فرنسا) . المؤتمر الدولي حول قواعد السمات وتطبيقاتها. سلسلة محاضرات في علوم الحاسوب. المجلد 461. نيويورك: سبرينغر-فيرلاغ. الصفحات 1-12 . CiteSeerX 10.1.1.105.5365 . doi : 10.1007/3-540-53101-7_1 . ISBN    978-3-540-53101-2تمت أرشفة الملف (PDF) من النسخة الأصلية بتاريخ 23 نوفمبر 2020. تم الاطلاع عليه بتاريخ 6 فبراير 2020 .
  20. تشارلز ر. كيركلي وجونز ف. روليفسون، "نظام LOT للترجمة الموجهة بالبنية النحوية"، تقرير داخلي لمعهد ستانفورد للأبحاث ISR 187531-139، 1966.
  21. جورج جيه ​​إي (1967أ). محلل بناء الجملة، والمتعرف، والمحلل النحوي، ونظام التفسير الدلالي، مركز ستانفورد للمسرع الخطي، 15 نوفمبر 1967.
  22. 1 2 ريشينبرج، بيتر [بالألمانية] ؛ موسنبوك، هانسبيتر [بالألمانية] (1985). Ein Compiler-Generator für Mikrocomputer – Grundlagen, Anwendungen, Programmierung in Modula-2 (باللغة الألمانية) (1 ed.). ميونيخ، ألمانيا: دار نشر كارل هانسر . رقم ISBN  3-446-14495-1.(ملاحظة: يصف الكتاب بناء Coco في Modula-2 .)
  23. غراي، روبرت و.؛ ليفي، ستيفن ب.؛ هيورينغ، فنسنت ب.؛ سلون، أنتوني م.؛ وايت، ويليام م. (1992). "إيلي: نظام بناء مترجمات كامل ومرن" . اتصالات رابطة مكائن ​​الحوسبة . 35 (2): 121-130 . doi : 10.1145/129630.129637 . S2CID 5121773 . 
  24. فوستر، جيه إم (1968). "برنامج لتحسين بناء الجملة" . مجلة الكمبيوتر . 11 : 31-34 . doi : 10.1093/comjnl/11.1.31 .
  25. "Copper | Minnesota Extensible Language Tools Group" . melt.cs.umn.edu . تم الاطلاع عليه بتاريخ 25-03-2025 .
  26. "tacc - The Alternative Compiler Compiler" . legomatrix.com . تم الاطلاع عليه بتاريخ 25-03-2025 .

للمزيد من القراءة