خطأ في التجميع
يشير خطأ الترجمة إلى حالة يفشل فيها المترجم في ترجمة جزء من شفرة المصدر لبرنامج حاسوبي ، إما بسبب أخطاء في الشفرة نفسها، أو، في حالات نادرة، بسبب أخطاء في المترجم نفسه. غالبًا ما تساعد رسالة خطأ الترجمة المبرمجين في تصحيح أخطاء شفرة المصدر. على الرغم من أن تعريفات الترجمة والتفسير قد تكون غامضة، إلا أن أخطاء الترجمة تشير عمومًا إلى الترجمة الثابتة فقط، وليس الترجمة الديناميكية . مع ذلك، قد تحتوي الترجمة الديناميكية تقنيًا على أخطاء ترجمة، على الرغم من أن العديد من المبرمجين والمصادر قد يصنفونها على أنها أخطاء وقت التشغيل . تشير معظم المترجمات الفورية ، مثل محرك جافا سكريبت V8 ، إلى أخطاء الترجمة بشكل مبهم على أنها أخطاء في بناء الجملة ، لأنها تتحقق منها في وقت التشغيل . [ 1 ] [ 2 ]
أمثلة
أخطاء شائعة في ترجمة لغة C++
- معرّف غير مُعلن، على سبيل المثال:
doy.cpp: In function `int main()': doy.cpp:25: `DayOfYear' undeclared (first use this function)[ 3 ]
هذا يعني أن المتغير "DayOfYear" يحاول أن يُستخدم قبل أن يتم تعريفه.
- دالة عامة غير معلنة، على سبيل المثال:
xyz.cpp: In function `int main()': xyz.cpp:6: `cout' undeclared (first use this function)[ 3 ]
هذا يعني أن المبرمج على الأرجح نسي تضمين iostream .
- خطأ في التحليل، على سبيل المثال:
somefile.cpp:24: parse error before `something'[ 4 ]
قد يعني هذا أن الفاصلة المنقوطة مفقودة في نهاية العبارة السابقة.
أخطاء المترجم الداخلية
خطأ المُصرّف الداخلي (يُختصر عادةً إلى ICE) هو خطأ لا يحدث بسبب خلل في الكود المصدري، بل بسبب خلل في المُصرّف نفسه. يُمكن أحيانًا تجاوز هذا الخطأ بإجراء تغييرات طفيفة وغير مؤثرة على الكود المصدري حول السطر المُشار إليه بالخطأ (إن وُجد)، [ 5 ] ولكن في بعض الأحيان، يجب إجراء تغييرات أكبر، مثل إعادة هيكلة الكود، لتجنب بعض البنى. قد يُؤدي استخدام مُصرّف مختلف أو إصدار مختلف من المُصرّف إلى حل المشكلة، ويكون حلاً مقبولاً في بعض الحالات. عند حدوث خطأ المُصرّف الداخلي، لا تُخرج العديد من المُصرّفات خطأً قياسيًا، بل تُخرج نسخة مُختصرة، مع ملفات إضافية مُرفقة، تُوفّر فقط لأخطاء المُصرّف الداخلية. هذا لضمان عدم تعطل البرنامج عند تسجيل الخطأ، مما يجعل حله شبه مستحيل. عادةً ما تكون للملفات الإضافية المُرفقة بأخطاء المُصرّف الداخلية تنسيقات خاصة تُحفظ بها، مثل تنسيق Java . تُعد هذه التنسيقات عمومًا أكثر صعوبة في التحليل من الملفات العادية، ولكنها لا تزال تحتوي على معلومات مفيدة للغاية لحل الخلل الذي تسبب في التعطل. [ 6 ].dump
مثال على خطأ داخلي في المُصرّف:
somefile.c:1001: خطأ داخلي في المُصرّف: خطأ في تجزئة الذاكرة يرجى تقديم تقرير كامل عن الخلل. مع المصدر المعالج مسبقًا إذا كان ذلك مناسبًا. راجع <http://bugs.gentoo.org/> للاطلاع على التعليمات.
مراجع
- ↑ "أخطاء | توثيق Node.js الإصدار 7.9.0" . nodejs.org . تم الاطلاع عليه بتاريخ 14 أبريل 2017 .
- ↑ "خطأ في بناء الجملة" . شبكة مطوري موزيلا . تم الاسترجاع في 14 أبريل 2017 .
- 1 2 "أخطاء شائعة في مُصرّف ومُربط لغة C++" . مؤرشف من الأصل بتاريخ 16-02-2008 . تم الاطلاع عليه بتاريخ 12-02-2008 .
- ↑ "أخطاء المترجم، والرابط، ووقت التشغيل" .
- ↑ كونينغهام، وارد (18 مارس 2010). "خطأ في المُصرّف" . ويكي ويكي ويب . تم الاسترجاع في 14 أبريل 2017 .
- ↑ جاغادش. "تحليل عطل JVM" . تم الاسترجاع في 15 أبريل 2017 .
- تصحيح الأخطاء
- أخطاء الحاسوب
