المترجم
في مجال الحوسبة ، المُترجم هو برنامج يُحوّل شفرة الحاسوب المكتوبة بلغة برمجة معينة ( لغة المصدر ) إلى لغة أخرى ( لغة الهدف ). يُستخدم مصطلح "المُترجم" بشكل أساسي للبرامج التي تُحوّل شفرة المصدر من لغة برمجة عالية المستوى إلى لغة برمجة منخفضة المستوى (مثل لغة التجميع ، أو الشفرة الكائنية ، أو شفرة الآلة ) لإنشاء برنامج قابل للتنفيذ . [ 1 ] [ 2 ] : ص1 [ 3 ]
توجد أنواع عديدة من المترجمات البرمجية التي تُنتج مخرجات بأشكال مفيدة مختلفة. يُنتج المترجم المتقاطع شيفرةً لوحدة معالجة مركزية أو نظام تشغيل مختلف عن النظام الذي يعمل عليه. أما المترجم التمهيدي ، فهو غالبًا مترجم مؤقت يُستخدم لتجميع مترجم دائم أو مُحسَّن للغة برمجة معينة.
تشمل البرامج ذات الصلة برامج فك التشفير ، وهي برامج تترجم من لغات منخفضة المستوى إلى لغات عالية المستوى؛ وبرامج تترجم بين لغات عالية المستوى، وتسمى عادةً مترجمات المصدر إلى المصدر أو برامج التحويل البرمجي ؛ وبرامج إعادة كتابة اللغة ، وهي عادةً برامج تترجم شكل التعبيرات دون تغيير اللغة؛ ومترجمات المترجمات ، وهي مترجمات تنتج مترجمات (أو أجزاء منها)، غالبًا بطريقة عامة وقابلة لإعادة الاستخدام بحيث تكون قادرة على إنتاج العديد من المترجمات المختلفة.
من المرجح أن يقوم المترجم ببعض أو كل العمليات التالية، والتي تُسمى غالبًا بالمراحل: المعالجة المسبقة ، والتحليل المعجمي ، والتحليل النحوي ، والتحليل الدلالي ( الترجمة الموجهة نحو بناء الجملة )، وتحويل برامج الإدخال إلى تمثيل وسيط ، وتحسين الكود ، وتوليد كود خاص بالجهاز . تُنفذ المترجمات هذه المراحل عادةً كمكونات نمطية، مما يُعزز التصميم الفعال وصحة تحويلات مدخلات المصدر إلى مخرجات الهدف. قد يكون من الصعب جدًا تتبع أخطاء البرامج الناتجة عن سلوك المترجم غير الصحيح وتجاوزها؛ لذلك، يبذل مطورو المترجمات جهدًا كبيرًا لضمان صحة المترجم . [ 4 ]
مقارنة مع المترجم
فيما يتعلق بجعل شفرة المصدر قابلة للتنفيذ، يؤدي المفسر وظيفة مشابهة للمترجم، ولكن عبر آلية مختلفة. ينفذ المفسر الشفرة دون تحويلها إلى شفرة الآلة. [ 2 ] : ص2. لذلك، تنفذ بعض المفسرات شفرة المصدر، بينما تنفذ أخرى شكلاً وسيطاً مثل الشفرة البايتية .
يميل البرنامج المُترجم إلى لغة الآلة إلى العمل بسرعة أكبر من البرنامج المُفسَّر، بينما تميل البيئات التي تستخدم لغة وسيطة (بايت كود) إلى العمل بسرعة متوسطة. في المقابل، يسمح الترجمة الفورية (JIT) بسرعة تنفيذ مماثلة لسرعة لغة الآلة مع تكلفة وقت معالجة بدء التشغيل لمرة واحدة.
تُترجم لغات البرمجة منخفضة المستوى ، مثل لغة التجميع ولغة C ، عادةً، خاصةً عندما تكون السرعة عاملاً مهماً، بدلاً من دعمها لأنظمة تشغيل متعددة . في هذه اللغات، توجد مطابقة مباشرة بين شفرة المصدر وشفرة الآلة الناتجة ، مما يُسهّل على المبرمجين التحكم في استخدام موارد الجهاز.
نظريًا، يمكن استخدام أي لغة برمجة عبر مُصرّف أو مُفسّر، ولكن عمليًا، غالبًا ما تُستخدم اللغات مع أحدهما فقط. مع ذلك، من الممكن كتابة مُصرّف للغة شائعة التفسير. على سبيل المثال، يمكن ترجمة لغة Common Lisp إلى بايت كود جافا (ثم تفسيرها بواسطة آلة جافا الافتراضية )، أو إلى كود C (الذي يمكن ترجمته مرة أخرى إلى كود الآلة الأصلي)، أو مباشرةً إلى الكود الأصلي.
تاريخ

شكّلت مفاهيم الحوسبة النظرية التي طورها العلماء والرياضيون والمهندسون أساس تطوير الحوسبة الرقمية الحديثة خلال الحرب العالمية الثانية. ونشأت لغات البرمجة الثنائية البدائية لأن الأجهزة الرقمية لا تفهم سوى الأصفار والآحاد وأنماط الدوائر في بنية الجهاز الأساسية. وفي أواخر أربعينيات القرن العشرين، تم ابتكار لغات التجميع لتوفير تجريد أكثر عملية لبنى الحاسوب. [ 5 ] أدت سعة الذاكرة المحدودة للحواسيب المبكرة إلى تحديات تقنية كبيرة عند تصميم أولى المترجمات. ولذلك، كان لا بد من تقسيم عملية الترجمة إلى عدة برامج صغيرة. تُنتج برامج الواجهة الأمامية نواتج التحليل التي تستخدمها برامج الواجهة الخلفية لتوليد الشفرة المستهدفة. ومع توفير تكنولوجيا الحاسوب المزيد من الموارد، أصبح من الممكن تصميم المترجمات بشكل أفضل بما يتوافق مع عملية الترجمة.
عادةً ما يكون استخدام لغة برمجة عالية المستوى أكثر إنتاجية للمبرمج، لذا فقد تطورت هذه اللغات بشكل طبيعي نتيجةً للقدرات التي توفرها الحواسيب الرقمية. اللغات عالية المستوى هي لغات رسمية محددة بدقة من خلال تركيبها النحوي ودلالاتها التي تُشكل بنية اللغة عالية المستوى. وتشمل عناصر هذه اللغات الرسمية ما يلي :
- الأبجدية ، أي مجموعة محدودة من الرموز
- السلسلة ، وهي سلسلة محدودة من الرموز
- اللغة ، أي مجموعة من السلاسل على الأبجدية
يمكن تعريف الجمل في اللغة من خلال مجموعة من القواعد تسمى القواعد النحوية. [ 6 ]
يصف نموذج باكوس-ناور (BNF) بنية "الجمل" في لغة ما. وقد طوّره جون باكوس واستُخدم لوصف بنية لغة ألغول 60. [ 7 ] تستند هذه الأفكار إلى مفاهيم القواعد الخالية من السياق التي وضعها اللغوي نعوم تشومسكي . [ 8 ] " أصبح نموذج باكوس-ناور وامتداداته أدوات قياسية لوصف بنية رموز البرمجة. وفي كثير من الحالات، تُولّد أجزاء من المترجمات تلقائيًا من وصف نموذج باكوس-ناور." [ 9 ]
بين عامي 1942 و1945، صمّم كونراد تسوزه أول لغة برمجة ( خوارزمية ) للحواسيب، أطلق عليها اسم Plankalkül ("حساب الخطة"). كما تخيّل تسوزه جهاز Planfertigungsgerät ("جهاز تجميع الخطة") لترجمة الصيغة الرياضية للبرنامج تلقائيًا إلى فيلم مثقوب قابل للقراءة آليًا . [ 10 ] ورغم عدم تطبيقها عمليًا حتى سبعينيات القرن العشرين، إلا أنها قدّمت مفاهيم ظهرت لاحقًا في لغة APL التي صمّمها كين إيفرسون في أواخر خمسينيات القرن العشرين. [ 11 ] لغة APL هي لغة للحسابات الرياضية.
بين عامي 1949 و1951، اقترح هاينز روتشاوزر برنامج سوبربلان ، وهو لغة برمجة عالية المستوى ومترجم آلي. [ 12 ] وقد قام فريدريش إل. باور وكلاوس ساميلسون لاحقًا بتطوير أفكاره . [ 13 ]
لقد وفر تصميم لغات البرمجة عالية المستوى خلال السنوات التكوينية للحوسبة الرقمية أدوات برمجة مفيدة لمجموعة متنوعة من التطبيقات:
- تُعتبر لغة فورتران (ترجمة الصيغ) المستخدمة في التطبيقات الهندسية والعلمية واحدة من أوائل لغات البرمجة عالية المستوى التي تم تنفيذها، وأول مترجم مُحسِّن. [ 14 ]
- تطورت لغة كوبول (لغة الأعمال المشتركة) من لغتي A-0 و FLOW-MATIC لتصبح اللغة عالية المستوى السائدة لتطبيقات الأعمال. [ 15 ]
- لغة ليسب (معالج القوائم) للحساب الرمزي. [ 16 ]
تطورت تقنية المترجمات من الحاجة إلى تحويل دقيق ومحدد لبرنامج المصدر عالي المستوى إلى برنامج هدف منخفض المستوى للحاسوب الرقمي. يمكن اعتبار المترجم واجهة أمامية لتحليل شفرة المصدر، وواجهة خلفية لدمج هذا التحليل في شفرة الهدف. ويمكن أن يؤدي التحسين بين الواجهة الأمامية والخلفية إلى إنتاج شفرة هدف أكثر كفاءة. [ 17 ]
بعض المعالم المبكرة في تطوير تقنية المترجمات البرمجية:
- مايو 1952 : قام فريق غريس هوبر في شركة ريمنجتون راند بكتابة مُترجم لغة البرمجة A-0 (وابتكروا مصطلح " المُترجم " لوصفه)، [ 18 ] [ 19 ] [ 20 ] على الرغم من أن مُترجم A-0 كان يعمل بشكل أقرب إلى مُحمِّل أو رابط منه إلى المفهوم الحديث للمُترجم الكامل. [ 21 ] [ 22 ] [ 23 ]
- عام 1952، قبل سبتمبر : يعتبر البعض أن مترجم Autocode الذي طوره أليك غليني لجهاز كمبيوتر مانشستر مارك 1 في جامعة مانشستر هو أول لغة برمجة مترجمة. [ 24 ]
- ١٩٥٤-١٩٥٧ : قام فريق بقيادة جون باكوس في شركة آي بي إم بتطوير لغة فورتران، التي تُعتبر عادةً أول لغة برمجة عالية المستوى. وفي عام ١٩٥٧، أنجزوا مُترجمًا للغة فورتران، يُنسب إليه الفضل عمومًا في تقديم أول مُترجم كامل لا لبس فيه. [ ٢٥ ]
- 1959 : بدأ مؤتمر لغة أنظمة البيانات (CODASYL) تطوير لغة كوبول . استند تصميم كوبول إلى لغتي A-0 و FLOW-MATIC. وبحلول أوائل الستينيات، كانت لغة كوبول تُترجم إلى بنى معمارية متعددة.
- ١٩٥٨-١٩٦٠ : كانت لغة ALGOL 58 بمثابة النواة الأولى للغة ALGOL 60. وقد قدمت هذه اللغة ميزة كتل التعليمات البرمجية ، التي تُعدّ نقلة نوعية في ظهور البرمجة الهيكلية . وكانت ALGOL 60 أول لغة تُطبّق تعريفات الدوال المتداخلة بنطاق معجمي ، كما تضمنت الاستدعاء الذاتي . وتم تعريف صيغتها باستخدام صيغة BNF . وقد ألهمت ALGOL 60 العديد من اللغات التي تلتها. وقد علّق توني هوار قائلاً: "... لم تكن مجرد تحسين للغات السابقة فحسب، بل كانت أيضًا أفضل من جميع اللغات التي تلتها تقريبًا." [ ٢٦ ] [ ٢٧ ]
- ١٩٥٨-١٩٦٢ : صمم جون مكارثي لغة ليسب في معهد ماساتشوستس للتكنولوجيا . [ ٢٨ ] وفرت قدرات معالجة الرموز ميزات مفيدة لأبحاث الذكاء الاصطناعي. في عام ١٩٦٢، أشار إصدار ليسب ١.٥ إلى بعض الأدوات: مترجم كتبه ستيفن راسل ودانيال ج. إدواردز، ومترجم ومجمع كتبهما تيم هارت ومايك ليفين. [ ٢٩ ]
كُتبت أنظمة التشغيل والبرامج المبكرة بلغة التجميع. في ستينيات وسبعينيات القرن الماضي، كان استخدام لغات البرمجة عالية المستوى لبرمجة الأنظمة لا يزال مثيرًا للجدل بسبب محدودية الموارد. مع ذلك، بدأت جهود بحثية وصناعية عديدة في التحول نحو لغات برمجة الأنظمة عالية المستوى، مثل BCPL و BLISS و B و C.
صُممت لغة البرمجة الأساسية المدمجة ( BCPL ) عام 1966 على يد مارتن ريتشاردز في جامعة كامبريدج، وطُوّرت في الأصل كأداة لكتابة المترجمات. [ 30 ] وقد طُوّرت العديد من المترجمات، ويُقدّم كتاب ريتشاردز رؤى قيّمة حول اللغة ومترجمها. [ 31 ] لم تكن BCPL مجرد لغة برمجة أنظمة مؤثرة لا تزال تُستخدم في الأبحاث [ 32 ] ، بل شكّلت أيضًا أساسًا لتصميم لغتي B وC.
طُوِّرت لغة BLISS (اللغة الأساسية لتنفيذ برمجيات النظام) لجهاز كمبيوتر PDP-10 التابع لشركة Digital Equipment Corporation (DEC) بواسطة فريق بحثي بقيادة دبليو إيه وولف من جامعة كارنيجي ميلون (CMU). ثم قام فريق جامعة كارنيجي ميلون بتطوير مُترجم BLISS-11 بعد عام واحد في عام 1970.
مشروع Multics (خدمة المعلومات والحوسبة المتعددة)، وهو نظام تشغيل قائم على المشاركة الزمنية، شارك فيه معهد ماساتشوستس للتكنولوجيا (MIT ) ومختبرات بيل وشركة جنرال إلكتريك (التي أصبحت لاحقًا هانيويل )، وقاده فرناندو كورباتو من معهد ماساتشوستس للتكنولوجيا. [ 33 ] كُتب Multics بلغة PL/I التي طورتها شركة IBM ومجموعة مستخدمي IBM. [ 34 ] كان هدف IBM هو تلبية متطلبات الأعمال والعلوم وبرمجة الأنظمة. كانت هناك لغات أخرى يمكن النظر فيها، لكن PL/I قدمت الحل الأكثر اكتمالًا على الرغم من أنها لم تكن قد طُبقت بعد. [ 35 ] خلال السنوات الأولى من مشروع Multics، كان من الممكن ترجمة جزء من اللغة إلى لغة التجميع باستخدام مترجم Early PL/I (EPL) الذي طوره دوغ ماكيلوري وبوب موريس من مختبرات بيل. [ 36 ] دعم EPL المشروع حتى تم تطوير مترجم تمهيدي للغة PL/I الكاملة. [ 37 ]
انسحبت مختبرات بيل من مشروع Multics عام 1969، وطورت لغة برمجة أنظمة B استنادًا إلى مفاهيم BCPL، كتبها دينيس ريتشي وكين تومسون . أنشأ ريتشي مُترجمًا تمهيديًا للغة B وكتب نظام التشغيل Unix (خدمة المعلومات والحوسبة أحادية الإرسال) لجهاز PDP-7 بلغة B. وأصبح اسم Unix لاحقًا Unix.
بدأت مختبرات بيل تطوير وتوسيع لغة C بالاعتماد على لغتي B وBCPL. وقد نُقل مُصرّف BCPL إلى نظام Multics بواسطة مختبرات بيل، وكانت BCPL اللغة المُفضّلة فيها. [ 38 ] في البداية، استُخدم برنامج واجهة أمامية لمُصرّف B الخاص بمختبرات بيل أثناء تطوير مُصرّف C. في عام 1971، وفّر جهاز PDP-11 الجديد الموارد اللازمة لتعريف امتدادات للغة B وإعادة كتابة المُصرّف. وبحلول عام 1973، اكتمل تصميم لغة C بشكل أساسي، وأُعيدت كتابة نواة نظام يونكس لجهاز PDP-11 بلغة C. بدأ ستيف جونسون تطوير مُصرّف C المحمول (PCC) لدعم إعادة توجيه مُصرّفات C إلى أجهزة جديدة. [ 39 ] [ 40 ]
قدّمت البرمجة كائنية التوجه (OOP) إمكانيات مثيرة للاهتمام لتطوير التطبيقات وصيانتها. تعود مفاهيم البرمجة كائنية التوجه إلى ما قبل ذلك، حيث كانت جزءًا من لغتي LISP و Simula . [ 41 ] ازداد اهتمام مختبرات بيل بالبرمجة كائنية التوجه مع تطوير لغة C++ . [ 42 ] استُخدمت C++ لأول مرة عام 1980 لبرمجة الأنظمة. اعتمد التصميم الأولي على إمكانيات برمجة الأنظمة في لغة C مع مفاهيم Simula. أُضيفت إمكانيات البرمجة كائنية التوجه عام 1983. [ 43 ] نفّذ برنامج Cfront واجهة أمامية للغة C++ لمترجم لغة C84. في السنوات اللاحقة، طُوّرت العديد من مترجمات C++ مع ازدياد شعبية هذه اللغة.
في العديد من مجالات التطبيق، لاقت فكرة استخدام لغة برمجة عالية المستوى رواجاً سريعاً. ونظراً لتوسع الوظائف التي تدعمها لغات البرمجة الحديثة وتزايد تعقيد بنى الحواسيب، أصبحت المترجمات أكثر تعقيداً.
رعت وكالة مشاريع البحوث الدفاعية المتقدمة ( DARPA ) مشروعًا لتطوير مُترجم برمجي بالتعاون مع فريق بحث وولف في جامعة كارنيجي ميلون عام ١٩٧٠. وكان تصميم مُترجم الإنتاج عالي الجودة ( PQCC ) يهدف إلى إنتاج مُترجم إنتاج عالي الجودة (PQC) انطلاقًا من تعريفات رسمية للغة المصدر واللغة الهدف. [ ٤٤ ] وقد حاول مشروع PQCC توسيع نطاق مصطلح "مُترجم-مُترجم" ليتجاوز معناه التقليدي كمولد للمُحللات النحوية (مثل Yacc )، ولكن دون جدوى تُذكر. لذا، يُمكن وصف PQCC بشكل أدق بأنه مولد للمُترجمات.
سعى بحث PQCC في عملية توليد الشفرة إلى بناء نظام كتابة مترجمات آلي بالكامل. وقد أسفر هذا الجهد عن اكتشاف وتصميم بنية مراحل PQC. ووفر مترجم BLISS-11 البنية الأولية. [ 45 ] شملت المراحل التحليل (الواجهة الأمامية)، والترجمة الوسيطة إلى الآلة الافتراضية (الواجهة الوسطى)، والترجمة إلى اللغة الهدف (الواجهة الخلفية). طُوِّرت لغة TCOL خصيصًا لبحث PQCC للتعامل مع بنيات خاصة بكل لغة في التمثيل الوسيط. [ 46 ] دعمت إصدارات مختلفة من TCOL لغات برمجة متنوعة. بحث مشروع PQCC في تقنيات بناء المترجمات الآلية. وأثبتت مفاهيم التصميم جدواها في تحسين المترجمات، وخاصةً مترجمات لغة البرمجة Ada (التي أصبحت لغة كائنية التوجه منذ عام 1995) .
قامت وثيقة ستونمان الخاصة بلغة آدا [ أ ] بإضفاء الطابع الرسمي على بيئة دعم البرنامج (APSE) إلى جانب النواة (KAPSE) والحد الأدنى (MAPSE). وقد دعمت جامعة نيويورك/إدنبرة جهود تطوير وتوحيد لغة آدا بالتعاون مع المعهد الوطني الأمريكي للمعايير (ANSI) والمنظمة الدولية للمعايير (ISO). وشمل التطوير الأولي لمترجمات لغة آدا من قبل القوات المسلحة الأمريكية دمج المترجمات في بيئة تصميم متكاملة كاملة وفقًا لخطة وثيقة ستونمان . وعمل الجيش والبحرية على مشروع نظام لغة آدا (ALS) الموجه لبنية DEC/VAX، بينما بدأ سلاح الجو العمل على بيئة آدا المتكاملة (AIE) الموجهة لسلسلة IBM 370. وعلى الرغم من أن هذه المشاريع لم تحقق النتائج المرجوة، إلا أنها ساهمت في الجهد الإجمالي لتطوير لغة آدا. [ 47 ]
بدأت جهود أخرى لتطوير مُترجمات لغة آدا في بريطانيا بجامعة يورك ، وفي ألمانيا بجامعة كارلسروه . وفي الولايات المتحدة، قدمت شركة فيرديكس (التي استحوذت عليها لاحقًا شركة راشيونال) نظام فيرديكس لتطوير آدا (VADS) للجيش الأمريكي. وفر VADS مجموعة من أدوات التطوير، بما في ذلك مُترجم. وكان من الممكن استضافة نظام يونكس/VADS على منصات يونكس متنوعة، مثل DEC Ultrix وSun 3/60 Solaris، المُصممة خصيصًا لمعالج موتورولا 68020 في تقييم أجرته قيادة الاتصالات الإلكترونية التابعة للجيش الأمريكي. [ 48 ] وسرعان ما توفرت العديد من مُترجمات آدا التي اجتازت اختبارات التحقق من صحة آدا. وطورت مؤسسة البرمجيات الحرة، مشروع جنو، مجموعة مُترجمات جنو (GCC)، التي توفر إمكانية أساسية لدعم لغات وأهداف متعددة. ويُعد إصدار آدا GNAT أحد أكثر مُترجمات آدا استخدامًا. GNAT مجاني، ولكن يتوفر أيضًا دعم تجاري، على سبيل المثال، تأسست شركة AdaCore عام 1994 لتوفير حلول برمجية تجارية للغة آدا. يتضمن GNAT Pro برنامج GNAT المبني على GNU GCC مع مجموعة أدوات لتوفير بيئة تطوير متكاملة .
استمرت لغات البرمجة عالية المستوى في دفع عجلة البحث والتطوير في مجال المترجمات. وشملت مجالات التركيز التحسين والتوليد التلقائي للتعليمات البرمجية. وقد أثرت التوجهات السائدة في لغات البرمجة وبيئات التطوير على تقنية المترجمات. وأصبح المزيد من المترجمات مُدمجًا في توزيعات اللغات (مثل بيرل، ومجموعة أدوات تطوير جافا) وكجزء من بيئات التطوير المتكاملة (مثل VADS، وإكليبس، وآدا برو). وازدادت العلاقات والترابط بين التقنيات. وساهم ظهور خدمات الويب في نمو لغات الويب ولغات البرمجة النصية. وتعود جذور البرامج النصية إلى بدايات واجهات سطر الأوامر (CLI) حيث كان بإمكان المستخدم إدخال أوامر لتنفيذها بواسطة النظام. وتطورت مفاهيم واجهة المستخدم (User Shell) مع لغات لكتابة برامج الواجهة. وقدّمت تصميمات ويندوز المبكرة إمكانية برمجة دفعية بسيطة. واستخدم التحويل التقليدي لهذه اللغات مُفسِّرًا. وعلى الرغم من عدم شيوع استخدامها، فقد كُتبت مترجمات باش وBatch. وفي الآونة الأخيرة، أصبحت اللغات المُفسَّرة المتطورة جزءًا من أدوات المطورين. وتشمل لغات البرمجة النصية الحديثة PHP، وبايثون، وروبي، ولوا (التي تُستخدم على نطاق واسع في تطوير الألعاب). وتدعم جميع هذه اللغات المُفسِّرات والمترجمات. [ 49 ]
عندما بدأ مجال الترجمة البرمجية في أواخر الخمسينيات، كان تركيزه مقتصراً على ترجمة برامج اللغات عالية المستوى إلى لغة الآلة... يتزايد ترابط مجال الترجمة البرمجية مع تخصصات أخرى، بما في ذلك هندسة الحاسوب، ولغات البرمجة، والأساليب الرسمية، وهندسة البرمجيات، وأمن الحاسوب. [ 50 ] وأشارت مقالة "أبحاث الترجمة البرمجية: الخمسون عاماً القادمة" إلى أهمية لغات البرمجة كائنية التوجه ولغة جافا. كما ذُكر الأمن والحوسبة المتوازية ضمن أهداف البحث المستقبلية.
بناء المترجم
يُنفّذ المُترجم تحويلاً رسميًا من برنامج مصدر عالي المستوى إلى برنامج هدف منخفض المستوى. يُمكن لتصميم المُترجم تحديد حل شامل أو معالجة مجموعة فرعية مُحددة تتفاعل مع أدوات ترجمة أخرى، مثل المُعالجات المُسبقة، والمُجمّعات، والروابط. تشمل متطلبات التصميم واجهات مُحددة بدقة، سواءً داخليًا بين مُكونات المُترجم أو خارجيًا بين مجموعات الأدوات الداعمة.
في البدايات، كان النهج المتبع في تصميم المترجمات يتأثر بشكل مباشر بمدى تعقيد لغة البرمجة المراد معالجتها، وخبرة المصممين، والموارد المتاحة. وقد أدت محدودية الموارد إلى ضرورة مراجعة شفرة المصدر أكثر من مرة.
قد يكون مُترجم لغة برمجة بسيطة نسبيًا، يكتبه شخص واحد، عبارة عن برنامج واحد متكامل. ولكن مع ازدياد تعقيد لغة المصدر، قد يُقسّم التصميم إلى عدة مراحل مترابطة. تُوفّر هذه المراحل المنفصلة تحسينات في التصميم تُركّز التطوير على وظائف عملية الترجمة.
المترجمات أحادية المرور مقابل المترجمات متعددة المرور
يعود تصنيف المترجمات حسب عدد مرات المرور إلى محدودية موارد الحواسيب. تتضمن عملية الترجمة تنفيذ العديد من العمليات، ولم تكن الحواسيب القديمة تمتلك ذاكرة كافية لاحتواء برنامج واحد يقوم بكل هذه العمليات. ونتيجة لذلك، قُسّمت المترجمات إلى برامج أصغر، يقوم كل منها بالمرور على الكود المصدري (أو تمثيل له) لتنفيذ بعض التحليلات والترجمات المطلوبة.
لطالما اعتُبرت القدرة على الترجمة في خطوة واحدة ميزةً قيّمة، لأنها تُسهّل عملية كتابة المُترجم، وعادةً ما تُترجم المُترجمات أحادية الخطوة الشيفرة المصدرية أسرع من المُترجمات متعددة الخطوات . ولذلك، وبسبب محدودية موارد الأنظمة القديمة جزئيًا، صُممت العديد من اللغات البرمجية القديمة خصيصًا بحيث يُمكن ترجمتها في خطوة واحدة (مثل لغة باسكال ).
في بعض الحالات، قد يتطلب تصميم ميزة لغوية من المُصرّف إجراء أكثر من عملية قراءة للمصدر. على سبيل المثال، لنفترض وجود تعريف في السطر 20 من المصدر يؤثر على ترجمة عبارة في السطر 10. في هذه الحالة، تحتاج عملية القراءة الأولى إلى جمع معلومات حول التعريفات التي تلي العبارات التي تؤثر عليها، ثم تُجرى الترجمة خلال عملية قراءة لاحقة.
من عيوب الترجمة في دورة واحدة عدم إمكانية إجراء العديد من التحسينات المعقدة اللازمة لإنتاج كود عالي الجودة. وقد يصعب تحديد عدد دورات الترجمة المُحسِّنة بدقة. فعلى سبيل المثال، قد تُحلِّل مراحل التحسين المختلفة تعبيرًا واحدًا عدة مرات، بينما تُحلِّل تعبيرًا آخر مرة واحدة فقط.
يُعدّ تقسيم المُترجم إلى برامج صغيرة أسلوبًا يستخدمه الباحثون المهتمون بإنتاج مُترجمات صحيحة بشكل قاطع. غالبًا ما يتطلب إثبات صحة مجموعة من البرامج الصغيرة جهدًا أقل من إثبات صحة برنامج واحد أكبر ومكافئ.
بنية المترجم ثلاثي المراحل

بغض النظر عن العدد الدقيق للمراحل في تصميم المترجم، يمكن تخصيص هذه المراحل لإحدى ثلاث مراحل رئيسية. تشمل هذه المراحل: مرحلة أمامية، ومرحلة وسطى، ومرحلة خلفية.
- تقوم الواجهة الأمامية بفحص المدخلات والتحقق من بناء الجملة والدلالات وفقًا للغة المصدر المحددة. بالنسبة للغات ذات الكتابة الثابتة، تُجري فحصًا للأنواع من خلال جمع معلومات الأنواع. إذا كان برنامج الإدخال غير صحيح نحويًا أو يحتوي على خطأ في النوع، فإنها تُنشئ رسائل خطأ و/أو تحذير، تُحدد عادةً موقع المشكلة في شفرة المصدر؛ في بعض الحالات، قد يكون الخطأ في مكان سابق (بعيدًا) في البرنامج. تشمل جوانب الواجهة الأمامية التحليل المعجمي، والتحليل النحوي، والتحليل الدلالي. تُحوّل الواجهة الأمامية برنامج الإدخال إلى تمثيل وسيط (IR) لمزيد من المعالجة بواسطة الواجهة الوسطى. عادةً ما يكون هذا التمثيل الوسيط تمثيلًا منخفض المستوى للبرنامج بالنسبة لشفرة المصدر.
- تُجري الطبقة الوسطى تحسينات على التمثيل الوسيط (IR) بشكل مستقل عن بنية وحدة المعالجة المركزية المستهدفة. ويهدف هذا الاستقلال بين شفرة المصدر وشفرة الآلة إلى تمكين مشاركة التحسينات العامة بين إصدارات المُصرّف التي تدعم لغات ومعالجات مستهدفة مختلفة. ومن أمثلة تحسينات الطبقة الوسطى: إزالة الشفرة غير الضرورية ( إزالة الشفرة الميتة ) أو الشفرة التي لا يمكن الوصول إليها ( تحليل إمكانية الوصول )، واكتشاف ونشر القيم الثابتة ( نشر الثوابت )، ونقل العمليات الحسابية إلى مكان أقل تكرارًا (مثلًا، خارج حلقة تكرارية)، أو تخصيص العمليات الحسابية بناءً على السياق، مما ينتج عنه في النهاية التمثيل الوسيط "المُحسَّن" الذي تستخدمه الطبقة الخلفية.
- تستقبل وحدة المعالجة الخلفية التمثيل الوسيط المُحسَّن من وحدة المعالجة الوسطى. وقد تُجري المزيد من التحليلات والتحويلات والتحسينات الخاصة ببنية وحدة المعالجة المركزية المستهدفة. تُولِّد وحدة المعالجة الخلفية كود التجميع المُعتمد على الهدف، وتُجري تخصيص السجلات في هذه العملية. كما تُجري جدولة التعليمات ، حيث تُعيد ترتيبها لإبقاء وحدات التنفيذ المتوازية مشغولة عن طريق ملء خانات التأخير . على الرغم من أن معظم مسائل التحسين تُصنَّف ضمن المسائل الصعبة حسابيًا (NP-hard) ، إلا أن التقنيات الاستدلالية لحلها مُطوَّرة جيدًا ومُطبَّقة في مُجمِّعات عالية الجودة. عادةً ما يكون ناتج وحدة المعالجة الخلفية عبارة عن كود آلة مُخصَّص لمعالج ونظام تشغيل مُحدَّدين.
يُتيح هذا النهج ذو الواجهة الأمامية/الوسطى/الخلفية دمج واجهات أمامية للغات مختلفة مع واجهات خلفية لوحدات معالجة مركزية مختلفة ، مع مشاركة تحسينات الواجهة الوسطى. [ 51 ] ومن الأمثلة العملية على هذا النهج مجموعة مُترجمات GNU ، وClang ( مُترجم C/C++ قائم على LLVM )، [ 52 ] ومجموعة مُترجمات Amsterdam ، والتي تتميز بواجهات أمامية متعددة، وتحسينات مشتركة، وواجهات خلفية متعددة.
الواجهة الأمامية

if(net>0.0)total+=net*(1.0+tax/100.0);"، ثم يُنشئ سلسلة من الرموز ، ويُصنّف كل رمز منها، على سبيل المثال ، كمعرّف ، أو كلمة محجوزة ، أو عدد حرفي ، أو عامل . يُحوّل المحلل النحوي هذه السلسلة الأخيرة إلى شجرة بناء جملة ، والتي تُعالج بعد ذلك بواسطة مراحل المُصرّف المتبقية. يتولى الماسح الضوئي والمحلل النحوي معالجة الأجزاء العادية والأجزاء الخالية من السياق من قواعد لغة C ، على التوالي.تقوم الواجهة الأمامية بتحليل شفرة المصدر لبناء تمثيل داخلي للبرنامج، يُسمى التمثيل الوسيط (IR). كما أنها تدير جدول الرموز ، وهو بنية بيانات تربط كل رمز في شفرة المصدر بالمعلومات المرتبطة به مثل الموقع والنوع والنطاق.
على الرغم من إمكانية أن تكون الواجهة الأمامية عبارة عن دالة أو برنامج متكامل واحد، كما هو الحال في المحلل اللغوي غير الماسح ، إلا أنها كانت تُنفذ وتُحلل تقليديًا على عدة مراحل، قد تُنفذ بالتتابع أو بالتزامن. يُفضل هذا الأسلوب نظرًا لمرونته وفصله بين المهام . في أغلب الأحيان، تُقسم الواجهة الأمامية إلى ثلاث مراحل: التحليل المعجمي (المعروف أيضًا بالتحليل المعجمي أو المسح)، والتحليل النحوي (المعروف أيضًا بالمسح أو التحليل النحوي)، والتحليل الدلالي . يشمل التحليل المعجمي والتحليل النحوي التحليل النحوي (نحو الكلمات ونحو العبارات، على التوالي)، وفي الحالات البسيطة، يمكن توليد هذه الوحدات (المحلل المعجمي والمحلل النحوي) تلقائيًا من قواعد اللغة، بينما في الحالات الأكثر تعقيدًا، يتطلب ذلك تعديلًا يدويًا. عادةً ما تكون قواعد اللغة المعجمية وقواعد العبارات قواعد خالية من السياق ، مما يُبسط التحليل بشكل كبير، مع معالجة حساسية السياق في مرحلة التحليل الدلالي. تُعدّ مرحلة التحليل الدلالي أكثر تعقيدًا وتُكتب يدويًا في الغالب، ولكن يمكن أتمتتها جزئيًا أو كليًا باستخدام قواعد السمات . ويمكن تقسيم هذه المراحل إلى مراحل فرعية: التحليل المعجمي الذي يشمل المسح والتقييم، والتحليل النحوي الذي يشمل بناء شجرة نحوية ملموسة (شجرة التحليل النحوي) ثم تحويلها إلى شجرة نحوية مجردة . وفي بعض الحالات، تُستخدم مراحل إضافية، لا سيما إعادة بناء الأسطر والمعالجة المسبقة، ولكن هذه الحالات نادرة.
تشمل المراحل الرئيسية للواجهة الأمامية ما يلي:
- تُحوّل عملية إعادة بناء الأسطر تسلسل الأحرف المُدخل إلى صيغة قياسية جاهزة للمحلل النحوي. تتطلب اللغات التيتُزيلالكلمات المفتاحية أو تسمح بوجود مسافات عشوائية داخل المعرّفات هذه المرحلة.من أعلى إلى أسفل،والنزولية المتكررة، والقائمة على الجداول، والتي استُخدمت في ستينيات القرن الماضي، تقرأ المصدر حرفًا حرفًا، ولم تكن تتطلب مرحلة تجزئة منفصلة.Atlas AutocodeوImp(وبعض تطبيقاتALGOLوCoral 66) أمثلة على اللغات التي تُزيل الكلمات المفتاحية، والتي تتضمن مُترجماتهاإعادة بناء الأسطر.
- تدعم المعالجة المسبقة استبدال الماكرو والترجمة الشرطية . عادةً ما تحدث مرحلة المعالجة المسبقة قبل التحليل النحوي أو الدلالي؛ على سبيل المثال، في حالة لغة C، يتعامل المعالج المسبق مع الرموز المعجمية بدلاً من الصيغ النحوية. مع ذلك، تدعم بعض اللغات، مثل Scheme ، استبدال الماكرو بناءً على الصيغ النحوية.
- يُقسّم التحليل المعجمي (المعروف أيضًا باسم التقطيع المعجمي أو التجزئة ) نص الشفرة المصدرية إلى سلسلة من الأجزاء الصغيرة تُسمى الرموز المعجمية . [ 53 ] يمكن تقسيم هذه المرحلة إلى مرحلتين: المسح ، الذي يُقسّم النص المُدخل إلى وحدات نحوية تُسمى المفردات ويُصنّفها؛ والتقييم ، الذي يُحوّل المفردات إلى قيمة مُعالجة. الرمز هو زوج يتكون من اسم الرمز وقيمته (اختيارية). [ 54 ] قد تشمل فئات الرموز الشائعة المعرّفات والكلمات المفتاحية والفواصل والمعاملات والقيم الحرفية والتعليقات، على الرغم من أن مجموعة فئات الرموز تختلف باختلاف لغات البرمجة . عادةً ما يكون بناء جملة المفردات لغة منتظمة ، لذا يمكن استخدام آلة حالة محدودة مُنشأة من تعبير نمطي للتعرف عليها. يُطلق على البرنامج الذي يُجري التحليل المعجمي اسم المُحلل المعجمي . قد لا تكون هذه خطوة منفصلة - يمكن دمجها مع خطوة التحليل في التحليل بدون ماسح ضوئي ، وفي هذه الحالة يتم التحليل على مستوى الأحرف، وليس على مستوى الرموز.
- يتضمن تحليل بناء الجملة (المعروف أيضًا باسم التحليل النحوي ) تحليل تسلسل الرموز لتحديد البنية النحوية للبرنامج. عادةً ما تُنشئ هذه المرحلة شجرة تحليل نحوي ، والتي تستبدل التسلسل الخطي للرموز ببنية شجرية مبنية وفقًا لقواعد نحوية رسمية تُحدد بناء جملة اللغة. غالبًا ما تُحلل شجرة التحليل النحوي وتُضاف إليها عناصر أخرى وتُحوّل بواسطة مراحل لاحقة في المُصرّف. [ 55 ]
- يُضيف التحليل الدلالي معلومات دلالية إلى شجرة التحليل النحوي ، ويُنشئ جدول الرموز . تُجري هذه المرحلة فحوصات دلالية، مثل فحص النوع (التحقق من أخطاء النوع)، أو ربط الكائنات (ربط مراجع المتغيرات والدوال بتعريفاتها)، أو التعيين المحدد (اشتراط تهيئة جميع المتغيرات المحلية قبل استخدامها)، ورفض البرامج غير الصحيحة أو إصدار تحذيرات. يتطلب التحليل الدلالي عادةً شجرة تحليل نحوي كاملة، مما يعني أن هذه المرحلة تلي منطقيًا مرحلة التحليل النحوي ، وتسبق منطقيًا مرحلة توليد الكود ، مع أنه غالبًا ما يكون من الممكن دمج عدة مراحل في عملية واحدة على الكود في تطبيق المُصرّف.
الفئة المتوسطة
يقوم الطرف الأوسط، المعروف أيضًا باسم المُحسِّن، بإجراء تحسينات على التمثيل الوسيط لتحسين أداء وجودة كود الآلة الناتج. [ 56 ] يحتوي الطرف الأوسط على تلك التحسينات المستقلة عن بنية وحدة المعالجة المركزية المستهدفة.
تشمل المراحل الرئيسية للطرف الأوسط ما يلي:
- التحليل : هو عملية جمع معلومات البرنامج من التمثيل الوسيط المُستمد من المُدخلات؛ ويُستخدم تحليل تدفق البيانات لبناء سلاسل الاستخدام والتعريف ، بالإضافة إلى تحليل التبعية ، وتحليل الأسماء المستعارة ، وتحليل المؤشرات ، وتحليل الهروب ، وما إلى ذلك. يُعد التحليل الدقيق أساسًا لأي تحسين للمُترجم. وعادةً ما يتم أيضًا بناء مخطط تدفق التحكم لكل دالة مُترجمة ومخطط استدعاء البرنامج خلال مرحلة التحليل.
- التحسين : يتم تحويل تمثيل اللغة الوسيطة إلى أشكال مكافئة وظيفيًا ولكنها أسرع (أو أصغر حجمًا). تشمل التحسينات الشائعة التوسيع المضمن ، وإزالة التعليمات البرمجية غير المستخدمة ، ونشر الثوابت ، وتحويل الحلقات ، وحتى التوازي التلقائي .
يُعد تحليل المُترجم شرطًا أساسيًا لأي عملية تحسين للمُترجم، وهما يعملان معًا بشكل وثيق. على سبيل المثال، يُعد تحليل التبعية أمرًا بالغ الأهمية لتحويل الحلقات .
يتفاوت نطاق تحليل المُصرّف وتحسيناته بشكل كبير؛ فقد يتراوح من العمل داخل كتلة أساسية ، إلى إجراءات كاملة، أو حتى البرنامج بأكمله. ثمة مفاضلة بين دقة التحسينات وتكلفة التجميع. على سبيل المثال، تُنفَّذ تحسينات "ثقب النظر" بسرعة أثناء التجميع، لكنها لا تؤثر إلا على جزء محلي صغير من الكود، ويمكن تنفيذها بشكل مستقل عن السياق الذي يظهر فيه هذا الجزء. في المقابل، يتطلب التحسين بين الإجراءات وقتًا أطول للتجميع ومساحة ذاكرة أكبر، ولكنه يُتيح تحسينات لا يُمكن إجراؤها إلا من خلال مراعاة سلوك وظائف متعددة في آنٍ واحد.
يُعدّ التحليل والتحسين بين الإجراءات من التقنيات الشائعة في المترجمات التجارية الحديثة من شركات HP و IBM و SGI و Intel و Microsoft و Sun Microsystems . وقد وُجّهت انتقادات طويلة الأمد لبرنامج GCC المجاني لافتقاره إلى تحسينات قوية بين الإجراءات، إلا أنه يشهد تحسناً في هذا الجانب. ومن المترجمات مفتوحة المصدر الأخرى التي تتمتع ببنية تحتية متكاملة للتحليل والتحسين، برنامج Open64 ، الذي تستخدمه العديد من المؤسسات لأغراض البحث والتجارة.
نظراً للوقت والمساحة الإضافيين اللازمين لتحليل المُصرّف وتحسيناته، تتجاهل بعض المُصرّفات هذه التحسينات افتراضياً. ويتعين على المستخدمين استخدام خيارات التجميع لإخبار المُصرّف صراحةً بالتحسينات التي يجب تفعيلها.
الواجهة الخلفية
تتولى الواجهة الخلفية مسؤولية التحسينات الخاصة ببنية وحدة المعالجة المركزية وتوليد التعليمات البرمجية . [ 56 ]
تشمل المراحل الرئيسية للجزء الخلفي ما يلي:
- التحسينات المعتمدة على الجهاز : هي التحسينات التي تعتمد على تفاصيل بنية وحدة المعالجة المركزية التي يستهدفها المترجم. [ 57 ] ومن الأمثلة البارزة على ذلك تحسينات "الثقب" ، التي تعيد كتابة تسلسلات قصيرة من تعليمات التجميع إلى تعليمات أكثر كفاءة.
- توليد الشفرة : تُترجم اللغة الوسيطة المُحوَّلة إلى لغة الإخراج، والتي عادةً ما تكون لغة الآلة الأصلية للنظام . يتضمن ذلك اتخاذ قرارات بشأن الموارد والتخزين، مثل تحديد المتغيرات التي ستُخزَّن في المسجلات والذاكرة، واختيار وجدولة تعليماتالآلة المناسبة مع أنماط العنونة المرتبطة بها (انظر أيضًا خوارزمية سيثي-أولمان ). قد يلزم أيضًا توليد بيانات تصحيح الأخطاء لتسهيل عملية التصحيح .
صحة المُترجم
صحة المترجم هي فرع من هندسة البرمجيات يهتم بإثبات أن المترجم يتصرف وفقًا لمواصفات لغته . [ 58 ] تشمل التقنيات تطوير المترجم باستخدام الأساليب الرسمية وإجراء اختبارات صارمة (تسمى غالبًا التحقق من صحة المترجم) على مترجم موجود.
تم تجميعها مقابل اللغات المفسرة
عادةً ما تُصمم لغات البرمجة عالية المستوى مع وضع نوع معين من الترجمة في الاعتبار: إما كلغة مُجمّعة أو لغة مُفسّرة . مع ذلك، عمليًا، نادرًا ما توجد سمات في لغة ما تُلزمها بأن تكون مُجمّعة أو مُفسّرة حصريًا، على الرغم من إمكانية تصميم لغات تعتمد على إعادة التفسير أثناء التشغيل. يعكس هذا التصنيف عادةً أكثر تطبيقات اللغة شيوعًا وانتشارًا. على سبيل المثال، تُسمى لغة BASIC أحيانًا لغة مُفسّرة، ولغة C لغة مُجمّعة، على الرغم من وجود مُجمّعات للغة BASIC ومُفسّرات للغة C. [ 59 ]
لا يحل التفسير محل الترجمة تمامًا، بل يخفيها عن المستخدم ويجعلها تدريجية. مع أن المفسر نفسه قابل للتفسير، إلا أن هناك حاجة إلى مجموعة من تعليمات الآلة التي تُنفذ مباشرةً في مكان ما أسفل مكدس التنفيذ (انظر لغة الآلة ).
علاوة على ذلك، يمكن أن تتضمن المترجمات، لأغراض التحسين، وظائف المفسرات، وقد تتضمن المفسرات تقنيات الترجمة المسبقة. على سبيل المثال، عندما يُنفذ تعبير ما أثناء الترجمة وتُدرج نتائجه في البرنامج الناتج، فإن ذلك يمنع إعادة حسابه في كل مرة يُشغل فيها البرنامج، مما يُسرّع البرنامج النهائي بشكل كبير. وتؤدي التوجهات الحديثة نحو الترجمة الفورية وتفسير الشفرة البايتية أحيانًا إلى طمس التصنيفات التقليدية للمترجمات والمفسرات. ويُعدّ التتبع الفائق أسلوبًا آليًا لتوليف المترجمات، وهو يُطوّر هذا المفهوم ويمكن استخدامه لتوليف مترجم من مفسر لغة.
تنص بعض مواصفات اللغات على ضرورة تضمين تطبيقاتها لآلية ترجمة؛ على سبيل المثال، لغة Common Lisp . مع ذلك، لا يوجد ما يمنع تفسير لغة Common Lisp في تعريفها. تتميز لغات أخرى بخصائص يسهل تطبيقها في المفسر، لكنها تجعل كتابة المترجم أكثر صعوبة؛ على سبيل المثال، لغات مثل APL و SNOBOL4 [ 60 ] ، والعديد من لغات البرمجة النصية التي تسمح للبرامج بإنشاء شفرة مصدرية عشوائية أثناء التشغيل باستخدام عمليات السلاسل النصية العادية، ثم تنفيذ تلك الشفرة بتمريرها إلى دالة تقييم خاصة . لتطبيق هذه الخصائص في لغة مترجمة، يجب عادةً تزويد البرامج بمكتبة وقت التشغيل التي تتضمن نسخة من المترجم نفسه.
الأنواع
يُصنف أحد أنواع المترجمات حسب المنصة التي يُنفذ عليها الكود المُولد. وتُعرف هذه المنصة باسم المنصة المستهدفة.
المترجم الأصلي أو المترجم المُستضاف هو مترجم يُصمم مُخرجاته للعمل مباشرةً على نفس نوع الحاسوب ونظام التشغيل الذي يعمل عليه. أما مُخرجات المترجم المتقاطع فهي مُصممة للعمل على منصة مختلفة. تُستخدم المترجمات المتقاطعة غالبًا عند تطوير برامج للأنظمة المُدمجة التي لا تدعم بيئة تطوير برمجيات.
قد يتم تنفيذ مخرجات المترجم الذي ينتج شيفرة لآلة افتراضية على نفس المنصة التي تم تشغيل المترجم الذي أنتجها عليها، أو قد لا يتم تنفيذها على منصة أخرى. ولهذا السبب، لا تُصنف هذه المترجمات عادةً على أنها مترجمات أصلية أو مترجمات متقاطعة.
قد تكون لغة البرمجة منخفضة المستوى التي يستهدفها المُصرّف لغة برمجة عالية المستوى بحد ذاتها . غالبًا ما تكون لغة C، التي يعتبرها البعض نوعًا من لغات التجميع القابلة للنقل، هي اللغة المستهدفة لمثل هذه المُصرّفات. على سبيل المثال، استخدم Cfront ، المُصرّف الأصلي للغة C++ ، لغة C كلغة مستهدفة. عادةً لا يُقصد أن يكون كود C الناتج عن هذا المُصرّف قابلاً للقراءة والصيانة من قِبل البشر، لذا يتم تجاهل أسلوب المسافة البادئة وإنشاء كود وسيط C أنيق. من بين ميزات لغة C التي تجعلها لغة مستهدفة جيدة #line، التوجيه الذي يمكن للمُصرّف توليده لدعم تصحيح أخطاء المصدر الأصلي، ودعم المنصات الواسع المتاح مع مُصرّفات C.
بينما يُخرج نوع المترجم الشائع رمز الآلة، إلا أن هناك أنواعًا أخرى كثيرة:
- تُعدّ المترجمات من المصدر إلى المصدر نوعًا من المترجمات التي تأخذ لغة برمجة عالية المستوى كمدخلات وتُخرج لغة برمجة عالية المستوى. على سبيل المثال، غالبًا ما تأخذ المترجمات المتوازية التلقائية برنامجًا مكتوبًا بلغة برمجة عالية المستوى كمدخلات، ثم تُحوّل الكود وتُضيف إليه تعليقات توضيحية خاصة بالبرمجة المتوازية (مثل OpenMP ) أو بنيات لغوية (مثل عبارات Fortran
DOALL). ومن المصطلحات الأخرى للمترجمات من المصدر إلى المصدر: المترجم التحويلي أو المترجم المُحوّل. [ 61 ] - تقوم مُجمِّعات الشفرة البايتية بتحويل البيانات إلى لغة التجميع الخاصة بجهاز نظري، مثل بعض تطبيقات لغة برولوج.
- تُعرف آلة Prolog هذه أيضًا باسم آلة Warren Abstract Machine (أو WAM).
- تُعد مُجمّعات بايت كود للغة جافا وبايثون أمثلة أخرى على هذه الفئة.
- تؤجل المترجمات الفورية (JIT) عملية الترجمة إلى وقت التشغيل. وتتوفر هذه المترجمات للعديد من اللغات الحديثة، بما في ذلك بايثون ، وجافا سكريبت ، وسمول توك ، وجافا ، ولغة الوسيط المشتركة (CIL) الخاصة بـ .NET ، والتي كانت موجودة في الأصل في إطار عمل مايكروسوفت .NET ، وغيرها. يعمل مترجم JIT عادةً داخل مترجم فوري. عندما يكتشف المترجم الفوري أن مسارًا برمجيًا "مُستَخدَم بكثرة"، أي أنه يُنفَّذ بشكل متكرر، يتم استدعاء مترجم JIT لترجمة هذا الجزء البرمجي المُستَخدَم بكثرة لتحسين الأداء.
- بالنسبة لبعض اللغات، مثل جافا، تُجمَّع التطبيقات أولاً باستخدام مُجمِّع بايت كود، ثم تُسلَّم في تمثيل وسيط مستقل عن الآلة . يقوم مُفسِّر بايت كود بتنفيذ البايت كود، لكن مُجمِّع JIT يُترجم البايت كود إلى لغة الآلة عند الحاجة إلى تحسين الأداء. [ 62 ]
- المترجمات الخاصة بالأجهزة (المعروفة أيضًا باسم أدوات التركيب) هي مترجمات يكون مدخلها لغة وصف الأجهزة ويكون مخرجها وصفًا، في شكل قائمة توصيلات أو غير ذلك، لتكوين الأجهزة.
- تستهدف مخرجات هذه المترجمات مكونات الحاسوب المادية على مستوى منخفض للغاية، مثل مصفوفة البوابات المنطقية القابلة للبرمجة الميدانية (FPGA) أو الدوائر المتكاملة المصممة خصيصًا للتطبيقات (ASIC). [ 63 ] تُسمى هذه المترجمات بمترجمات الأجهزة، لأن الشفرة المصدرية التي تُترجمها تتحكم فعليًا في التكوين النهائي للأجهزة وكيفية عملها. ولا ينتج عن عملية الترجمة سوى توصيلات بين الترانزستورات أو جداول البحث .
- من الأمثلة على مُجمِّعات الأجهزة برنامج XST، وهو أداة توليف Xilinx المستخدمة لتهيئة مصفوفات البوابات المنطقية القابلة للبرمجة (FPGAs). [ 64 ] وتتوفر أدوات مماثلة من Altera، [ 65 ] وSynplicity وSynopsys وغيرها من موردي الأجهزة. [ 66 ]
- تقوم أنظمة البحث بتجميع مجموعات فرعية من لغات البرمجة التسلسلية عالية المستوى، مثل بايثون أو سي++، مباشرةً إلى منطق رقمي متوازٍ. وعادةً ما يكون هذا أسهل بالنسبة للغات الوظيفية أو المجموعات الفرعية الوظيفية من لغات البرمجة متعددة الأنماط. [ 67 ]
- البرنامج الذي يترجم من لغة منخفضة المستوى إلى لغة عالية المستوى هو برنامج فك التشفير . [ 68 ]
- يُطلق على البرنامج الذي يُترجم إلى تنسيق كود كائني غير مدعوم على جهاز الترجمة اسم المترجم المتقاطع ، ويُستخدم عادةً لإعداد الكود للتنفيذ على تطبيقات البرامج المدمجة. [ 69 ]
- البرنامج الذي يعيد كتابة كود الكائن إلى نفس نوع كود الكائن مع تطبيق التحسينات والتحويلات هو برنامج إعادة تجميع ثنائي .
لا تُعتبر المُجمِّعات، التي تُترجم لغة التجميع المقروءة بشريًا إلى تعليمات لغة الآلة التي تُنفذها الأجهزة، مُترجمات. [ 70 ] [ ب ] (يُطلق على البرنامج العكسي الذي يُترجم لغة الآلة إلى لغة التجميع اسم مُفكِّك الشفرة .)
انظر أيضاً
ملاحظات ومراجع
- ↑ وزارة الدفاع الأمريكية (18 فبراير 1980) متطلبات ستونمان
- ↑ "تؤدي العديد من خصائص لغة المصدر الموضحة في القسم السابق إلى عدد من الاختلافات البارزة بين المترجمات والمجمعات. قد لا يكون التمييز واضحًا تمامًا في أي عنصر منها. علاوة على ذلك، قد يكون من الصعب التمييز بين مترجم بسيط ومجمع ماكرو قوي. ومع ذلك، فإن الاختلافات عادةً ما تكون جوهرية بما يكفي بحيث يبقى هناك تمييز نوعي بين المجمعات والمترجمات."
- ↑ "موسوعة: تعريف المُترجم" . PCMag.com . تم الاطلاع عليه بتاريخ 2 يوليو 2022 .
- 1 2 أهو، ألفريد ف.؛ سيثي، رافي؛ أولمان، جيفري د. (2007). المترجمات: المبادئ والتقنيات والأدوات (الطبعة الثانية ).
- ↑ سودارسنام، أشوك؛ مالك، شاراد؛ فوجيتا، ماساهيرو (2002). "منهجية تجميع قابلة لإعادة الاستهداف لمعالجات الإشارات الرقمية المدمجة باستخدام مكتبة تحسين التعليمات البرمجية المعتمدة على الجهاز". قراءات في التصميم المشترك للأجهزة/البرمجيات . إلسيفير. ص 506-515 . doi : 10.1016/b978-155860702-6/50045-4 . ISBN 9781558607026.
المترجم هو برنامج كمبيوتر يقوم بترجمة برنامج مكتوب بلغة عالية المستوى (HLL)، مثل C، إلى برنامج لغة تجميع مكافئ [2].
- ↑ صن، تشنغنيان؛ لي، فو؛ تشانغ، كيرون؛ سو، تشنغدونغ (2016). "نحو فهم أخطاء المترجم في GCC وLLVM" . وقائع الندوة الدولية الخامسة والعشرين لاختبار البرمجيات وتحليلها . ISSTA 2016. ACM. ص 294-305 . doi : 10.1145/2931037.2931074 . ISBN 9781450343909. S2CID 8339241 .
- ↑ باغاي، كريستيان (4 أبريل 2023). "تطور لغات البرمجة: من الثنائي البدائي إلى التجريدات عالية المستوى" . ميديوم . تم الاطلاع عليه في 10 يوليو 2024 .
- ↑ ملاحظات المحاضرة. المترجمات: المبادئ والتقنيات والأدوات. جينغ شين تشانغ. قسم علوم الحاسوب وهندسة المعلومات. جامعة تشي نان الوطنية
- ↑ نور، ب. وآخرون. "تقرير عن ALGOL 60". اتصالات ACM 3 (مايو 1960)، 299-314.
- ↑ تشومسكي، نعوم؛ لايتفوت، ديفيد دبليو. (2002). التراكيب النحوية . والتر دي جرويتر. ISBN 978-3-11-017279-9.
- ↑ غريس، ديفيد (2012). "الملحق 1: صيغة باكوس-ناور" . علم البرمجة . سبرينغر ساينس آند بيزنس ميديا. ص 304. ISBN 978-1461259831.
- ^ هيليج، هانز ديتر، أد. (2004) [نوفمبر 2002]. كتبت في بريمن، ألمانيا. Geschichten der Informatik - Visionen، Paradigmen، Leitmotive (باللغة الألمانية) (1 ed.). برلين / هايدلبرغ، ألمانيا: سبرينغر-فيرلاغ . ص 45، 104، 105. دوى : 10.1007 / 978-3-642-18631-8 . رقم ISBN 978-3-540-00217-8رقم الكتاب المعياري الدولي ( ISBN) 3-540-00217-0.(12+514 صفحة)
- ↑ إيفرسون، كينيث إي. (1962). لغة برمجة . جون وايلي وأولاده . ISBN 978-0-471430-14-8.
{{cite book}}عدم توافق رقم ISBN / التاريخ ( مساعدة ) - ^ روتيسهاوزر، هاينز (1951). "Über automatische Rechenplanfertigung bei Programmgesteuerten Rechenanlagen". Zeitschrift für Angewandte Mathematik und Mechanik (باللغة الألمانية). 31 : 255. دوى : 10.1002/zamm.19510310820 .
- ^ فوثي، مايكل. ويلك، توماس، محرران. (2015) [2014-11-14]. كتب في جينا، ألمانيا. Keller, Stack und automatisches Gedächtnis – eine Struktur mit Potenzial [ القبو والمكدس والذاكرة التلقائية - هيكل ذو إمكانات ] (PDF) (Tagungsband zum Kolloquium 14. نوفمبر 2014 في جينا). سلسلة GI: ملاحظات المحاضرات في المعلوماتية (LNI) - المواضيع (باللغة الألمانية). المجلد. تي-7. بون، ألمانيا: Gesellschaft für Informatik (GI) / Köllen Druck + Verlag GmbH. ص 20 – 21. ISBN 978-3-88579-426-4ISSN 1614-3213 . مؤرشف (PDF) من الأصل بتاريخ 12 أبريل 2020. تم الاطلاع عليه بتاريخ 12 أبريل 2020 . (77 صفحة)
- ↑ باكوس، جون. "تاريخ لغات فورتران 1 و2 و3" (ملف PDF) . تاريخ لغات البرمجة . مؤرشف (ملف PDF) من الأصل في 10 أكتوبر 2022 – عبر Softwarepreservation.org.
- ↑ بورتر آدامز، فيكي (5 أكتوبر 1981). "الكابتن غريس إم. هوبر: أم لغة كوبول". إنفوورلد. 3 (20): 33. ISSN 0199-6649.
- ↑ مكارثي، ج.؛ برايتون، ر.؛ إدواردز، د.؛ فوكس، ب.؛ هودز، ل.؛ لوكهام، د.؛ مالينغ، ك.؛ بارك، د.؛ راسل، س. (مارس 1960). "دليل مبرمجي لغة ليسب 1" (ملف PDF). بوسطن، ماساتشوستس: مجموعة الذكاء الاصطناعي، مركز الحوسبة ومختبر الأبحاث التابع لمعهد ماساتشوستس للتكنولوجيا.
- ↑ مبادئ وتقنيات وأدوات المترجمات، الطبعة الثانية، تأليف أهو، لام، سيثي، أولمان، رقم ISBN 0-321-48681-1
- ↑ هوبر، غريس موراي (1952). "تعليم الحاسوب". وقائع الاجتماع الوطني لجمعية آلات الحوسبة لعام 1952 (بيتسبرغ) - ACM '52 . الصفحات 243-249 . doi : 10.1145/609784.609818 . S2CID 10081016 .
- ↑ ريدجواي، ريتشارد ك. (1952). "تجميع البرامج". وقائع الاجتماع الوطني لجمعية آلات الحوسبة لعام 1952 (تورنتو) - ACM '52 . الصفحات 1-5 . doi : 10.1145/800259.808980 . S2CID 14878552 .
- ↑ "قائمة المترجمات والمجمعات المبكرة" .
- ↑ هوبر، غريس. "الخطاب الرئيسي" . وقائع مؤتمر ACM SIGPLAN لتاريخ لغات البرمجة (HOPL)، يونيو 1978. doi : 10.1145 /800025.1198341 .
- ↑ برودرير، هربرت (21 ديسمبر 2022). "هل ابتكرت غريس هوبر أول مترجم؟" .
- ↑ ستراون، جورج؛ ستراون، كانديس (2015). "غريس هوبر: المترجمات ولغة كوبول" . مجلة متخصصي تكنولوجيا المعلومات . 17 (يناير-فبراير 2015): 62-64 . رمز Bibcode : 2015ITPro..17a..62S . doi : 10.1109/MITP.2015.6 .
- ↑ كنوت، دونالد إي .؛ باردو، لويس تراب، "التطور المبكر للغات البرمجة"، موسوعة علوم وتكنولوجيا الحاسوب (مارسيل ديكر) 7: 419-493
- ↑ باكوس، جون (1 يونيو 1978)، "تاريخ فورتران 1 و2 و3" ، تاريخ لغات البرمجة ، نيويورك، نيويورك، الولايات المتحدة الأمريكية: رابطة آلات الحوسبة، ص 25-74 ، doi : 10.1145/800025.1198345 ، ISBN 978-0-12-745040-7تم الاطلاع عليه بتاريخ 9 أكتوبر 2024
- ↑ هوار، كار (ديسمبر 1973). "تلميحات حول تصميم لغات البرمجة" (ملف PDF) . ص 27. مؤرشف (ملف PDF) من الأصل في 10 أكتوبر 2022. (يُنسب هذا البيان أحيانًا بشكل خاطئ إلى إدسكار دبليو ديكسترا ، الذي شارك أيضًا في تنفيذ أول مترجم للغة ALGOL 60. )
- ↑ أبيلسون، هال؛ ديبفيج، آر كيه؛ وآخرون . ريس، جوناثان؛ كلينجر، ويليام (محررون). "تقرير منقح (3) حول مخطط لغة الخوارزميات، (مُهدى إلى ذكرى ALGOL 60)" . تم الاطلاع عليه بتاريخ 20 أكتوبر 2009 .
- ↑ " الوظائف المتكررة للتعبيرات الرمزية وحسابها بواسطة الآلة "، اتصالات ACM، أبريل 1960
- ↑ مكارثي، جون؛ أبراهامز، بول دبليو؛ إدواردز، دانيال جيه؛ هارت، تيموثي بي؛ ليفين، مايكل آي. (1965). دليل مبرمجي لغة ليسب 1.5 . مطبعة معهد ماساتشوستس للتكنولوجيا. ISBN 978-0-26213011-0.
- ↑ " BCPL: أداة لكتابة المترجمات وبرمجة الأنظمة " م. ريتشاردز، مختبر الرياضيات الجامعي، كامبريدج، إنجلترا، 1969
- ↑ BCPL: اللغة ومترجمها، إم ريتشاردز، مطبعة جامعة كامبريدج (نُشر لأول مرة في 31 ديسمبر 1981)
- ↑ دليل مستخدم BCPL Cintsys و Cintpos، إم. ريتشاردز، 2017
- ↑ كورباتو، إف جيه؛ فيسوتسكي، في إيه "مقدمة ونظرة عامة على نظام MULTICS" . مؤتمر الحاسوب المشترك لخريف 1965. Multicians.org.
- ↑ التقرير الثاني للجنة تطوير اللغة المتقدمة التابعة لـ SHARE، 25 يونيو 1964
- ↑ مقال "اختيار PL/I" على موقع Multicians.org، بقلم المحرر توم فان فليك
- ↑ "PL/I كأداة لبرمجة الأنظمة"، بقلم إف جيه كورباتو، داتاماشن، عدد 6 مايو 1969
- ↑ " مترجم Multics PL/1 "، RA Freiburghouse، GE، مؤتمر الحاسوب المشترك للخريف 1969
- ↑ دينيس إم. ريتشي، " تطور لغة سي "، المؤتمر الثاني لتاريخ لغات البرمجة التابع لجمعية آلات الحوسبة، أبريل 1993
- ↑ إس سي جونسون، "مترجم لغة سي محمول: النظرية والتطبيق"، الندوة الخامسة لجمعية آلات الحوسبة (ACM) حول لغات البرمجة والبرمجة العامة (POPL)، يناير 1978
- ↑ أ. سنايدر، مترجم محمول للغة سي ، معهد ماساتشوستس للتكنولوجيا، 1974.
- ↑ ك. نيغارد، جامعة أوسلو، النرويج، " المفاهيم الأساسية في البرمجة الكائنية التوجه "، نشرة SIGPLAN المجلد 21، 1986
- ↑ ب. ستروستروب: "ما هي البرمجة الموجهة للكائنات؟" وقائع المؤتمر الرابع عشر لجامعة ولاية أريزونا، 1986.
- ↑ بيارن ستروستروب، "نظرة عامة على لغة البرمجة C++"، دليل تقنية الكائنات (المحرر: سابا زامير، ISBN 0-8493-3135-8)
- ↑ ليفرت، كاتيل، هوبز، نيومر، راينر، شاتز، وولف: "نظرة عامة على مشروع مترجم-مترجم بجودة الإنتاج"، CMU-CS-89-105، 1979
- ↑ دبليو. وولف، ك. نوري، " الربط المتأخر في المترجمات المولدة بواسطة PQCC "، تقرير عرض أبحاث جامعة كارنيجي ميلون، CMU-CS-82-138، 1982
- ↑ جوزيف م. نيومر، ديفيد أليكس لامب، بروس دبليو. ليفرت، مايكل تايغ، ويليام أ. وولف - جامعة كارنيجي ميلون، وديفيد ليفين، أندرو هـ. راينيريت - إنترميتريكس: "TCOL Ada: تقرير منقح حول تمثيل وسيط للغة البرمجة القياسية لوزارة الدفاع الأمريكية"، 1979
- ↑ ويليام أ. ويتاكر، "آدا - المشروع: فريق العمل عالي المستوى التابع لوزارة الدفاع"، إشعارات ACM SIGPLAN (المجلد 28، العدد 3، مارس 1991)
- ↑ مركز CECOM لهندسة البرمجيات، تكنولوجيا البرمجيات المتقدمة، "التقرير النهائي - تقييم مجموعة معايير ACEC للتطبيقات في الوقت الحقيقي"، AD-A231 968، 1990
- ↑ ب. بيجار، إ. دي فريس، د. جريج، "حل عملي لمترجمات لغات البرمجة النصية"، بحث مقدم إلى مجلة علوم برمجة الحاسوب، 2009
- ↑ م. هول، د. بادوا، ك. بينغالي، "بحوث المترجمات: الخمسون عامًا القادمة"، مجلة ACM للاتصالات، 2009، المجلد 54، العدد 2
- ↑ كوبر وتوركزون 2012، ص 8
- ↑ لاتنر، كريس (2017). "LLVM" . في براون، إيمي؛ ويلسون، جريج (محرران). هندسة تطبيقات المصادر المفتوحة . مؤرشف من الأصل في 2 ديسمبر 2016. تم الاطلاع عليه في 28 فبراير 2017 .
- ^ أهو، لام، سيثي، أولمان 2007، ص. 5-6، 109-189
- ^ أهو، لام، سيثي، أولمان 2007، ص. 111
- ^ أهو، لام، سيثي، أولمان 2007، ص. 8، 191-300
- 1 2 بلينديل، غابرييل هيورت (3 يونيو 2016). اختيار التعليمات: المبادئ والأساليب والتطبيقات . سويسرا: سبرينغر. ISBN 978-3-31934019-7. OCLC 951745657 .
- ^ كوبر وتوكزون (2012)، ص. 540
- ↑ "S1- مُصرّف بسيط" ، بناء المُصرّف باستخدام جافا، جافا سي سي، وياك ، هوبوكين، نيوجيرسي، الولايات المتحدة الأمريكية: جون وايلي وأولاده ، 28 فبراير 2012، الصفحات 289-329 ، doi : 10.1002/9781118112762.ch12 ، ISBN 978-1-118-11276-2تم الاطلاع عليه بتاريخ 17 مايو 2023
- ↑ "المترجم مقابل المفسر في البرمجة" . Built In . تم الاسترجاع في 25 مايو 2025 .
- ↑ "لغة برمجة SNOBOL4" . سورس فورج . 27 أكتوبر 2023. تم الاطلاع عليه بتاريخ 25 مايو 2025 .
- ↑ إيليوشين، يفغيني؛ ناميوت، ديمتري (2016). "حول مترجمات المصدر إلى المصدر" . المجلة الدولية لتقنيات المعلومات المفتوحة . 4 (5): 48-51 . مؤرشف من الأصل في 13 سبتمبر 2022. تم الاسترجاع في 14 سبتمبر 2022 .
- ↑ أيكوك، جون (2003). "تاريخ موجز لنظام الإنتاج في الوقت المناسب". مجلة ACM للحوسبة . 35 (2): 93-113 . doi : 10.1145/857076.857077 . S2CID 15345671 .
- ↑ شوارتز، جوردان س.؛ بيتز، فو؛ روز، جوناثان (22-25 فبراير 1998). "موجّه سريع يعتمد على قابلية التوجيه لـ FPGAs" (ملف PDF) . وقائع الندوة الدولية السادسة لعام 1998 التي نظمتها ACM/SIGDA حول مصفوفات البوابات القابلة للبرمجة الميدانية - FPGA '98 . مونتيري، كاليفورنيا: ACM . الصفحات 140-149 . doi : 10.1145/275107.275134 . ISBN 978-0897919784. S2CID 7128364 . مؤرشف (PDF) من الأصل في 9 أغسطس 2017.
- ↑ فريق عمل شركة زيلينكس (2009). "نظرة عامة على توليف XST" . شركة زيلينكس. مؤرشف من الأصل في 2 نوفمبر 2016. تم الاطلاع عليه في 28 فبراير 2017 .
- ↑ فريق عمل شركة ألترا (2017). "محرك Spectra-Q™" . Altera.com. مؤرشف من الأصل بتاريخ 10 أكتوبر 2016. تم الاطلاع عليه بتاريخ 28 فبراير 2017 .
- ↑ نيغام، راشيت؛ توماس، صموئيل؛ لي، تشيجينغ؛ سامبسون، أدريان (أبريل 2021). "بنية تحتية للمترجم لمولدات المسرعات" . وقائع المؤتمر الدولي السادس والعشرين لجمعية ACM حول الدعم المعماري للغات البرمجة وأنظمة التشغيل . الصفحات 804-817 . arXiv : 2102.09713 . doi : 10.1145/3445814.3446712 . ISBN 978-1-4503-8317-2تم الاطلاع عليه بتاريخ 20 مايو 2026 .
- ↑ جوركانز، ك؛ فوكس، سي (2023). مُجمِّع تدفق البيانات المنطقي الرقمي لمجموعة بايثون الفرعية للروبوتات وإنترنت الأشياء . المؤتمر الدولي لهندسة الكهرباء والإلكترونيات حول الثقة والأمن والخصوصية في الحوسبة والاتصالات (TrustCom-2023).
- ↑ ميتولا، إيريز (2011). "أدوات المهنة". أدوات التجسس البرمجية المُدارة . الصفحات 39-62 . doi : 10.1016/B978-1-59749-574-5.00003-9 . ISBN 978-1-59749-574-5.
- ↑ تشاندراسيكاران، سيدهارث (26 يناير 2018). "تبسيط عملية التجميع المتقاطع" . embedjournal.com . تم الاطلاع عليه في 5 مارس 2023 .
- ↑ كالينجارت وهورويتز 1979، ص 186-187
للمزيد من القراءة
- أهو، ألفريد ف.؛ سيثي ، رافي ؛ أولمان، جيفري د. (1986). المترجمات: المبادئ والتقنيات والأدوات (الطبعة الأولى ). أديسون-ويسلي . ISBN 9780201100884.
- ألين، فرانسيس إي. (سبتمبر 1981). "تاريخ تقنية معالجات اللغة في شركة آي بي إم". مجلة آي بي إم للبحوث والتطوير . 25 (5). آي بي إم : 535-548 . doi : 10.1147/rd.255.0535 .
- ألين، راندي؛ كينيدي، كين (2001). تحسين المترجمات للبنى الحديثة . دار مورغان كوفمان للنشر . ISBN 978-1-55860-286-1.
- أبيل، أندرو ويلسون (2002). تنفيذ المترجمات الحديثة في جافا ( الطبعة الثانية). مطبعة جامعة كامبريدج . ISBN 978-0-521-82060-8.
- أبيل، أندرو ويلسون (1998). تنفيذ المترجمات الحديثة في لغة ML . مطبعة جامعة كامبريدج . ISBN 978-0-521-58274-2.
- بورنات، ريتشارد (1979). فهم وكتابة برامج الترجمة: دليل عملي (ملف PDF) . دار ماكميلان للنشر . رقم ISBN 978-0-333-21732-0أُرشف من النسخة الأصلية (PDF) بتاريخ 15 يونيو 2007. تم الاطلاع عليه بتاريخ 11 أبريل 2007 .
- كالينجارت، بيتر (1979). هورويتز، إليس (محرر). المجمعات، والمترجمات، وترجمة البرامج . سلسلة هندسة برمجيات الحاسوب (الطبعة الأولى، الطبعة الأولى). بوتوماك، ماريلاند: دار نشر علوم الحاسوب. رقم ISBN 0-914894-23-4ISSN 0888-2088 . LCCN 78-21905 . تاريخ الاسترجاع: 20 مارس 2020 . (صفحتان + 14 صفحة + 270 صفحة + 6 صفحات)
- كوبر، كيث دانيال؛ توركزون، ليندا (2012). هندسة المترجم ( الطبعة الثانية). أمستردام، هولندا: إلسيفير/مورغان كوفمان. ص 8. ISBN 978-0-12088478-0. OCLC 714113472 .
- غريس، ديفيد (1971). بناء المترجمات للحواسيب الرقمية (باللغات الإنجليزية والإسبانية واليابانية والصينية والإيطالية والروسية). نيويورك: جون وايلي وأولاده . ISBN 0-471-32776-X
النص الأول حول بناء المترجمات
. - ماكيمان، ويليام مارشال؛ هورنينج، جيمس جيه ؛ وورتمان، ديفيد بي (1970). مولد المترجمات . إنجلوود كليفس، نيو جيرسي : برنتيس هول . ISBN 978-0-13-155077-3.
- موشنيك، ستيفن (1997). تصميم وتنفيذ المترجمات المتقدمة . دار مورغان كوفمان للنشر . رقم ISBN 978-1-55860-320-2.
- سكوت، مايكل لي (2005). براغماتية لغات البرمجة ( الطبعة الثانية). مورغان كوفمان . ISBN 978-0-12-633951-2.
- سريكانت، واي إن؛ شانكار، بريتي (2003). دليل تصميم المترجمات: التحسينات وتوليد كود الآلة . مطبعة سي آر سي . رقم ISBN 978-0-8493-1240-3.
- تيري، باتريك د. (1997). المترجمات ومولدات المترجمات: مقدمة مع لغة C++ . دار نشر طومسون الدولية للحاسوب. ISBN 978-1-85032-298-6.
- ويرث، نيكلاوس (1996). بناء المترجمات (ملف PDF) . أديسون-ويسلي . ISBN 978-0-201-40353-4أُرشف من النسخة الأصلية (PDF) بتاريخ 17 فبراير 2017. تم الاطلاع عليه بتاريخ 24 أبريل 2012 .
- مجتمع LLVM. "مولد الشفرة المستقل عن الهدف في LLVM" . وثائق LLVM . تم الاطلاع عليه بتاريخ 17 يونيو 2016 .
- مراجع كتب تصميم المترجمات: مجموعة من المراجع لكتب تصميم المترجمات الرئيسية.
روابط خارجية
- نهج تدريجي لبناء المترجمات - دليل تعليمي بصيغة PDF
- أساسيات تصميم المترجمات في أرشيف الإنترنت (تمت أرشفته في 15 مايو 2018)
- فيديو قصير على يوتيوب يشرح الفرق المفاهيمي الرئيسي بين المترجمات والمفسرات
- تحليل بناء الجملة وتحليل لغة LL1 على يوتيوب
- لنقم ببناء مُترجم ، بقلم جاك كرينشو
- منتدى حول تطوير المترجمات في Wayback Machine (تمت أرشفته في 10 أكتوبر 2014)
- الاختراعات الأمريكية
- المترجمون
- مكتبات الحاسوب
- تنفيذ لغة البرمجة
- أنواع برامج الأدوات المساعدة
