مراحل المترجم مع مثال، والعملية والخطوات

⚡ ملخص ذكي

تصف مراحل المترجم كيف يقوم المترجم بتحويل التعليمات البرمجية المصدرية إلى تعليمات برمجية آلية من خلال ست مراحل: التحليل المعجمي، والتحليل النحوي، والتحليل الدلالي، وتوليد التعليمات البرمجية الوسيطة، وتحسين التعليمات البرمجية، وتوليد التعليمات البرمجية، مدعومة بإدارة جدول الرموز ومعالجة الأخطاء طوال العملية.

  • 🔤 التحليل المعجمي: تقوم المرحلة الأولى بمسح شفرة المصدر وتجميع الأحرف في رموز، مما يؤدي إلى ملء جدول الرموز.
  • 🌳 تحليل بناء الجملة: يتم فحص الرموز وفقًا لقواعد النحو وترتيبها في شجرة تحليل.
  • ✅ التحليل الدلالي: يقوم المترجم بالتحقق من توافق الأنواع ومعناها باستخدام شجرة بناء الجملة وجدول الرموز.
  • 🔁 متوسط Code: يتم إنشاء تمثيل مستقل عن الآلة، مثل رمز العناوين الثلاثة، لتسهيل الترجمة.
  • ⚡ الاقوي: تمت إزالة التعليمات البرمجية الزائدة والتي لا يمكن الوصول إليها لجعل البرنامج أسرع وأصغر حجماً.
  • 🖥️ Code توليد: تقوم المرحلة النهائية بتحويل الكود المُحسَّن إلى كود الآلة المستهدف، وتخصيص السجلات والذاكرة.

ما هي مراحل تصميم المترجم؟

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

  1. التحليل المعجمي
  2. تحليل النحو
  3. التحليل الدلالي
  4. مولد الكود الوسيط
  5. Code محسن
  6. Code مولد كهربائي
مراحل المترجم
مراحل المترجم

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

المرحلة الأولى: التحليل المعجمي

التحليل المعجمي هو المرحلة الأولى عندما يقوم المترجم بمسح الكود المصدري. يمكن ترك هذه العملية إلى اليمين، حرفًا بحرف، وتجميع هذه الأحرف في رموز مميزة.
هنا، يتم تجميع تدفق الأحرف من البرنامج المصدر في تسلسلات ذات معنى من خلال تحديد الرموز المميزة. فهو يقوم بإدخال التذاكر المقابلة في جدول الرموز ويمرر هذا الرمز إلى المرحلة التالية.
الوظائف الأساسية لهذه المرحلة هي:

  • التعرف على الوحدات المعجمية في الكود المصدري
  • تصنيف الوحدات المعجمية إلى فئات مثل الثوابت والكلمات المحجوزة وإدخالها في جداول مختلفة. وسوف يتجاهل التعليقات في البرنامج المصدر
  • تحديد الرمز المميز الذي ليس جزءًا من اللغة

مثال:
س = ص + 10

الرموز

X معرف
= مهمة تشغيل
Y معرف
+ عامل الإضافة
10 رقم الهاتف

المرحلة الثانية: تحليل بناء الجملة

يدور تحليل بناء الجملة حول اكتشاف البنية في الكود. فهو يحدد ما إذا كان النص يتبع التنسيق المتوقع أم لا. الهدف الرئيسي من هذه المرحلة هو التأكد من صحة الكود المصدري الذي كتبه المبرمج أم لا.
يعتمد تحليل بناء الجملة على القواعد المستندة إلى لغة البرمجة المحددة عن طريق إنشاء شجرة التحليل بمساعدة الرموز المميزة. كما أنه يحدد بنية اللغة المصدر والنحو أو بناء جملة اللغة.
فيما يلي قائمة بالمهام التي تم تنفيذها في هذه المرحلة:

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

مثال

أي معرف/رقم هو تعبير
إذا كان x معرفًا وy+10 عبارة عن تعبير، فإن x=y+10 عبارة عن عبارة.
خذ في الاعتبار شجرة التحليل للمثال التالي

(a+b)*c

مثال على تحليل بناء الجملة

في شجرة التحليل

  • العقدة الداخلية: سجل بملف مشغل وملفين للأطفال
  • ورقة: سجلات تحتوي على حقلين/أكثر؛ واحد للرمز المميز ومعلومات أخرى حول الرمز المميز
  • التأكد من أن مكونات البرنامج تتناسب مع بعضها البعض بشكل مفيد
  • يجمع معلومات النوع ويتحقق من توافق النوع
  • التحقق من المعاملات مسموح بها من خلال لغة المصدر

المرحلة الثالثة: التحليل الدلالي

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

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

مثال

float x = 20.2;
float y = x*30;

في الكود أعلاه، سيقوم المحلل الدلالي بطباعة العدد الصحيح 30 ليطفو 30.0 قبل الضرب

المرحلة الرابعة: المتوسطة Code جيل

بمجرد انتهاء مرحلة التحليل الدلالي، يقوم المترجم بإنشاء رمز وسيط للجهاز المستهدف. وهو يمثل برنامجًا لـ...tracآلة تي.
الكود الوسيط يقع بين اللغة عالية المستوى ومستوى الآلة. يجب إنشاء هذا الرمز الوسيط بطريقة تجعل من السهل ترجمته إلى رمز الجهاز المستهدف.
الوظائف على المستوى المتوسط Code توليد:

  • يجب أن يتم إنشاؤها من التمثيل الدلالي للبرنامج المصدر
  • يحمل القيم المحسوبة أثناء عملية الترجمة
  • يساعدك على ترجمة الكود الوسيط إلى اللغة الهدف
  • يسمح لك بالحفاظ على ترتيب الأسبقية للغة المصدر
  • يحتوي على العدد الصحيح من المتغيرات الخاصة بالتعليمات

مثال

على سبيل المثال،

total = count + rate * 5

الكود الوسيط بمساعدة طريقة رمز العنوان هو:

t1 := int_to_float(5)
t2 := rate * t1
t3 := count + t2
total := t3

المرحلة 5: Code التحسين

المرحلة التالية هي تحسين الكود أو الكود المتوسط. تقوم هذه المرحلة بإزالة سطر التعليمات البرمجية غير الضروري وترتيب تسلسل البيانات لتسريع تنفيذ البرنامج دون إضاعة الموارد. الهدف الرئيسي من هذه المرحلة هو تحسين الكود الوسيط لإنشاء كود يعمل بشكل أسرع ويشغل مساحة أقل.
الوظائف الأساسية لهذه المرحلة هي:

  • يساعدك على إنشاء مقايضة بين سرعة التنفيذ والتجميع
  • يحسن وقت تشغيل البرنامج المستهدف
  • يُنشئ تعليمات برمجية مبسطة لا تزال في تمثيل متوسط
  • إزالة التعليمات البرمجية التي لا يمكن الوصول إليها والتخلص من المتغيرات غير المستخدمة
  • إزالة البيانات التي لم يتم تغييرها من الحلقة

على سبيل المثال:
ضع في اعتبارك الكود التالي

a = intofloat(10)
b = c * a
d = e + b
f = d

يمكن أن تصبح

b =c * 10.0
f = e+b

المرحلة 6: Code جيل

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

مثال

أ = ب + 60.0
ربما سيتم ترجمتها إلى السجلات.

MOVF a, R1
MULF #60.0, R2
ADDF R1, R2

إدارة جدول الرموز

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

روتين التعامل مع الأخطاء

في عملية تصميم المترجم قد يحدث خطأ في جميع المراحل المذكورة أدناه:

  • محلل معجمي: الرموز المكتوبة بشكل خاطئ
  • محلل بناء الجملة: قوس مفقود
  • مولد الكود الوسيط: متغيرات غير متطابقة لمشغل
  • Code المُحسِّن: عندما لا يكون الوصول إلى العبارة ممكنًا
  • Code Generator: عندما تكون الذاكرة ممتلئة أو لا يتم تخصيص السجلات المناسبة
  • جداول الرموز: خطأ في المعرفات المعلنة المتعددة

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

الأسئلة الشائعة

تقوم مرحلة التحليل (الواجهة الأمامية) بتفكيك الشيفرة المصدرية من خلال التحليل المعجمي والنحوي والدلالي. أما مرحلة التركيب (الواجهة الخلفية) فتقوم ببناء البرنامج المستهدف من خلال توليد الشيفرة الوسيطة وتحسينها وإعادة توليدها.

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

رمز العناوين الثلاثة هو تمثيل وسيط حيث تحتوي كل تعليمة على ثلاثة معاملات على الأكثر، مثل t1 = a + b. من السهل تحسينه ويسهل ترجمته إلى رمز الآلة المستهدف.

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

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

تلخيص هذه التدوينة بـ: