المترجمة والمفسرة
| English | العربية |
|---|---|
| compiler/kəmˈpaɪlə/ | مُترجم |
| interpreter/ɪnˈtɜːprɪtə/ | مُفسِّر |
| lexical analysis/ˈleksɪkl əˈnæləsɪs/ | التحليل اللغوي |
| tokens/ˈtəʊkənz/ | رموز |
| syntax analysis/ˈsɪntæks əˈnæləsɪs/ | التحليل النحوي |
| abstract syntax tree/ˈæbstrækt ˈsɪntæks triː/ | شجرة النحو المجرد |
| syntax error/ˈsɪntæks ˈerə/ | خطأ صياغة |
| semantic analysis/səˈmæntɪk əˈnæləsɪs/ | التحليل الدلالي |
| code generation/kəʊd ˌdʒenəˈreɪʃn/ | توليد الكود |
| code optimisation/kəʊd ˌɒptɪmaɪˈzeɪʃn/ | تحسين الكود |
الخطأ الذي كلف سفينة فضائية، اكتشفه فاصلة
- دُمرت مارينر 1 التابعة لناسا على بعد 293 ثانية من الإطلاق في عام 1962. غالباً ما يُنسب الفشل إلى خطأ واحد في برنامج التوجيه.
- تُروى القصة مراراً وتكراراً لأنها تجسد الخوف الذي يعرفه كل مبرمج: مترجم يترجم بفرح برنامجاً يقول شيئاً لم تقصده أنت.
- المترجم ليس عملية واحدة بل خمس، وكل مرحلة تكتشف فئة مختلفة من الأخطاء. معرفة أي مرحلة تكتشف ماذا يخبرك بمصدر أي خطأ محدد.
- هذه الدرس هي كيف يقوم المفسّر بتشغيل برنامج دون إنتاج شيء، والمراحل الخمس التي يمر بها المترجم.
كيف يعمل المفسّر على تشغيل برنامج
- يقوم المفسّر بالترجمة والتشغيل في نفس الوقت، جملة تلو الأخرى.
- لكل جملة، يقرأ السطر، يحلله، يتحقق من الأنواع، ثم ينفذ الإجراء فوراً، وينتقل إلى التالي.
- لا ينتج ملفاً قابلاً للتنفيذ: الوجود الترجمة فقط في الذاكرة ويتم التخلص منه. هذا هو بالضبط ما يقصده المنهج، أنه يمكنه تنفيذ برنامج دون إنتاج نسخة مترجمة.
- يبلغ عن خطأ بمجرد الوصول إلى السطر المسبب له وعادة يتوقف، مما يوفر تغذية راجعة سريعة أثناء التطوير. كل مرة إعادة ترجمة، لذا فهو أبطأ، ويجب وجود المصدر والمفسّر معاً.

ترجم مرة واحدة واحفظها، أو ترجم وشغّل وانسَ
المفسر (Interpreter):
يعمل سطرًا بسطر، ويُبلغ عن الأخطاء عند الوصول إليها؛ لا يتم حفظ شيء كملف تنفيذي، وعادة ما يكون أبطأ.
يمكن للمفسر تنفيذ برنامج دون إنتاج نسخة مترجمة منه.
الترجمة موجودة فقط في الذاكرة، تعليمة بعبارة، ويتم التخلص منها. ولهذا يجب وجود المفسر في كل مرة يعمل فيها البرنامج.
المرحلة 1: التحليل اللغوي
- التحليل اللغوي يجمع أحرف المصدر الفردية إلى رموز: كلمات مفتاحية، معرفات، مؤثرات وقيم ثابتة.
- يتم استبعاد المسافات البيضاء والتعليقات، لأنها لا قيمة لها للمترجم، ويتم إدخال المعرفات في جدول الرموز.
- لذلك
total ← count * 2يصبح تسلسل الرمز معرف، إسناد، معرف، مؤثر، قيمة ثابتة. المحلل اللغوي لا يعرف ولا يهمه إذا كان ذلك يبدو منطقياً.
التحليل اللغوي (المحلل اللغوي - the lexer) يحول:
يجمع المحلل اللغوي الأحرف في رموز ويتجاهل المسافات/التعليقات؛ ثم يبني المحلل النحوي الشجرة.
يجمع التحليل اللغوي أحرف المصدر في ____ ويتجاهل المسافات والتعليقات.
الكلمات المفتاحية، المعرّفات، المؤثرات والثوابت. لا يصدر المحلل اللغوي أي حكم حول صحة البرنامج كترتيب.
المرحلة 2: التحليل النحوي
- التحليل النحوي، أو التفكيك، يتحقق من أن تسلسل الرموز يناسب قواعد اللغة، ويبني شجرة نحوية مجردة تمثل البنية.
- قوس مفقود، أو
ENDIFمفقود، أو كلمة مفتاحية في مكان خاطئ يتم التقاطها هنا: هذا ما هو عليه خطأ الصياغة، ولهذا السبب يمكن للمترجم الإبلاغ عنه دون تشغيل البرنامج أبدًا.

*القواعد التي يفحصها المحلل النحويsource
المرحلة 3: التحليل الدلالي
- التحليل الدلالي يتحقق من أن البرنامج الصحيح نحوياً يحمل معنى فعلاً: كل متغير تم الإعلان عنه قبل استخدامه، الأنواع على جانبي الإسناد متوافقة، الدالة تُستدعى بعدد صحيح من الحجج.
total ← "seven" * 2هو语法 جيد تماماً ونonsense كامل. فقط هذه المرحلة تكتشفه.- هذا هو التمييز الذي يختبره الامتحان: النحو هو الشكل، والدلالة هي المعنى.
أي مما يلي يتم فحصه بواسطة التحليل الدلالي بدلاً من التحليل النحوي؟
الأقواس قواعد نحوية، لذا فهي نحوية؛ المسافات البيضاء تخص المحلل اللغوي؛ المسجلات تخص توليد الكود. الإعلانات والأنواع تتعلق بالمعنى.
المرحلتان 4 و 5: توليد الكود والتحسين
- توليد الكود يسير عبر الشجرة ويصدر كود الآلة المستهدف، مختاراً المسجلات وترتيب البيانات.
- تحسين الكود يحسن ذلك الكود دون تغيير ما يفعله: إزالة العمل الزائد، حساب تعبيرات الثوابت وقت التجميع، وإعادة ترتيب التعليمات لتناسب خط الأنابيب.
- المخرجات هي ملف تنفيذي مستقل يعمل دون وجود المترجم.

*خمس مراحل، وكل واحدة تكتشف شيئاً لم تستطع السابقة اكتشافه
مراحل الترجمة
مرر عبر ما يفعله المترجم لمصدرك. كل مرحلة تسلّم ناتجها للمرحلة التالية — تتحول الأحرف إلى رموز، الرموز إلى شجرة، والشجرة إلى كود آلي مُحسّن.
صلح كل مرحلة من مراحل المترجم بما تقوم به.
كل مرحلة تحول البرنامج خطوة إضافية: رموز، ثم شجرة، ثم التحقق، ثم كود مُحسّن.
رتب مراحل المترجم بالترتيب.
اللغوي ← النحوي ← الدلالي ← توليد الكود ← تحسين.
يهدف تحسين الكود إلى:
التحسين يحسن الكود المُنتَج (طي الثوابت، إزالة التكرار، إعادة الترتيب لتدفق التعليمات).
مثال محلول: أي مرحلة تكتشف أي خطأ
x ← 5 +: الرموز لا تتناسب مع القواعد، مؤثر بدون مُعامل أيمن، لذا التحليل النحوي.x ← y + 1حيث لم يُعلنyأبدًا: النموذج صحيح لكن المعنى ليس كذلك، لذا التحليل الدلالي.IF a > b THEN OUTPUT aبدونENDIF: تحليل الصياغة مرة أخرى.- برنامج يعمل وطباعة المتوسط الخطأ: لا تكتشفه أي مرحلة. هذا خطأ منطقي، والاختبار وحده يكتشفه. سمِّ المرحلة و لماذا سمحت المراحل السابقة بمروره.
صلح كل سطر خاطئ بالمرحلة التي تكتشفه.
البناء النحوي هو الشكل، والدلالة هي المعنى، والخطأ المنطقي صالح في كليهما لكنه خاطئ في القصد.
مثال محلول: قارن بين المترجمين الاثنين
- اذكر الفرقين بين كيفية تعامل المترجم والمفسّر مع برنامج. [4]
- المترجم يترجم الكل البرنامج قبل تشغيله وينتج ملف تنفيذي، والذيIVED يعمل بدون المترجم؛ المفسّر يترجم وينفذ جملة تلو الأخرى ولا ينتج ملف تنفيذي، لذا يجب وجود المفسّر في كل مرة تشغيل.
- المترجم يبلغ عن كل الأخطاء معاً بعد الترجمة؛ المفسّر يبلغ عن الأول خطأ عندما يصل إلى ذلك السطر ويتوقف بعدها.
- كل علامة هي زوج: اذكر ماذا يفعل الأول وماذا يفعل الثاني بدلاً منه.
علامات ضائعة
- المفسّر لا ينتج نسخة مترجمة. هذه العبارة يستخدمها المنهج وهي العلامة التي يمنحها.
- المحلل اللغوي ينتج رموز ويستبعد المسافات البيضاء والتعليقات؛ لا يتحقق مما إذا كان البرنامج صالحاً.
- النحو هو الشكل، الدلالة هي المعنى. المتغير غير المُعلن هو خطأ دلالي، وليس خطأ نحوياً.
- يجب ألا يغير التحسين ما يفعله البرنامج، فقط كيف يقوم به بسرعة أو بكثافة أكبر.
لقد فهمت الأمر
- المفسّر يترجم وينفذ جملة تلو الأخرى، لا ينتج ملفاً قابلاً للتنفيذ، يبلغ عن أول خطأ عند سطره، ويعيد الترجمة في كل مرة تشغيل
- التحليل المعجمي يُنتج رموزاً ويتخلص من المسافات والتعليقات؛ أما التحليل النحوي فيفحص القواعد ويكوّن شجرة نحوية مجردة، واكتشاف أخطاء الصياغة.
- التحليل الدلالي يفحص المعنى: التصريحات، الأنواع، وعدد الحجاج.
- توليد الكود يُصدر لغة الآلة والتحسين يحسّنه دون تغيير السلوك، مما يعطي ملفاً تنفيذياً مستقلاً.