خطأ في بناء الجملة

خطأ بناء الجملة هو عدم تطابق في بنية البيانات المُدخلة إلى نظام حاسوبي يتطلب بنيةً محددة. بالنسبة لشفرة المصدر في لغة برمجة ، يكتشف المُترجم أخطاء بناء الجملة قبل تشغيل البرنامج (أثناء الترجمة)، بينما يكتشفها المُفسِّر أثناء التشغيل . قد يحدث خطأ بناء الجملة بناءً على قواعد بناء جملة أخرى غير تلك المُحددة في لغة البرمجة. على سبيل المثال، كتابة معادلة غير صالحة في آلة حاسبة (مُفسِّر) يُعد خطأً في بناء الجملة.
قد يعتبر البعض بعض الأخطاء التي تحدث أثناء ترجمة الشيفرة المصدرية أخطاءً نحوية، بينما لا يعتبرها آخرون كذلك. على سبيل المثال، يرى البعض أن المتغير غير المُهيأ في لغة جافا يُعد خطأً نحويًا، بينما يخالفهم آخرون الرأي [ 1 ] [ 2 ] ، ويصنفونه كخطأ دلالي ثابت . [ 2 ] [ 3 ] [ 4 ]
أمثلة
في لغة جافا
يُصدر مُصرّف جافا خطأً في بناء الجملة للكود التالي لأن السلسلة النصية غير مُحاطة بعلامات اقتباس. تفشل عملية التجميع ولا تُنتج ملفًا تنفيذيًا قابلاً للاستخدام.
System.out.println ( " Hello World " ) ;الصيغة الصحيحة هي:
System.out.println ( " Hello World " ) ;في لغة ليسب
الكود (add 1 1)عبارة عن برنامج Lisp صحيح نحويًا (بافتراض وجود دالة "add") يقوم بجمع 1 و 1.
مع ذلك، (_ 1 1)ينتج عن ذلك خطأ في بناء الجملة lexical error: '_' is not valid. لا يستطيع المحلل المعجمي تحديد الخطأ الأول - كل ما يعرفه هو أنه بعد إنتاج الرمز LEFT_PAREN، يصبح باقي البرنامج غير صالح، حيث لا توجد قاعدة كلمة تبدأ بـ '_'. (add 1 1وينتج عن ذلك خطأ في بناء الجملة parsing error: missing closing ')'. يحدد المحلل النحوي قاعدة إنتاج "القائمة" بسبب الرمز '(' (باعتباره التطابق الوحيد)، وبالتالي يعطي رسالة خطأ؛ بشكل عام، قد تكون القواعد النحوية غامضة .
تُعتبر أخطاء النوع وأخطاء المتغيرات غير المُعلنة أحيانًا أخطاءً نحوية عند اكتشافها أثناء الترجمة (وهو ما يحدث عادةً عند ترجمة اللغات ذات الأنواع القوية)، على الرغم من أنه من الشائع تصنيف هذه الأنواع من الأخطاء على أنها أخطاء دلالية . [ 5 ] [ 6 ] [ 2 ]
في لغة بايثون
في كود بايثون ، 'a' + 1يحتوي هذا الكود على خطأ في النوع لأنه يجمع سلسلة نصية حرفية مع عدد صحيح حرفي. يمكن اكتشاف هذا النوع من الأخطاء أثناء الترجمة - خلال تحليل العبارة - إذا كان المترجم يستخدم قواعد منفصلة تسمح بـ " عدد صحيح حرفي + عدد صحيح حرفي " ولكن ليس " سلسلة نصية حرفية + عدد صحيح حرفي ". مع ذلك، من المرجح أن يستخدم المترجم قاعدة تحليل تسمح بتعبيرات من نوع " حرفي أو مُعرِّف + حرفي أو مُعرِّف "، وعندها سيتم اكتشاف الخطأ أثناء التحليل السياقي (عند التحقق من النوع). في بعض الحالات، لا يقوم المترجم بهذا التحقق، ولا يتم اكتشاف هذه الأخطاء إلا أثناء التشغيل.
في لغة برمجة ديناميكية الأنواع، حيث لا يُمكن تحديد النوع إلا أثناء التشغيل، لا يُمكن اكتشاف العديد من أخطاء الأنواع إلا أثناء التشغيل. على سبيل المثال، في بايثون، a + bيكون التعبير صحيحًا نحويًا على مستوى العبارة، ولكن لا يُمكن تحديد صحة أنواع a و b إلا أثناء التشغيل، لأن المتغيرات في بايثون لا تُحدد أنواعها، بل القيم فقط. وبينما يوجد اختلاف في الآراء حول ما إذا كان ينبغي تسمية خطأ النوع الذي يكتشفه المُصرّف خطأً نحويًا (دلالة ثابتة)، فإن أخطاء الأنواع التي لا يُمكن اكتشافها إلا أثناء تنفيذ البرنامج تُعتبر دائمًا أخطاءً دلالية وليست نحوية.
على الآلة الحاسبة
قد يحدث خطأ في بناء الجملة على الآلة الحاسبة (وخاصة الآلة الحاسبة العلمية أو البيانية ) عندما تكون معادلة الإدخال غير صحيحة بطرق مثل:
- رقم أو عملية غير صالحة
- قوس مفتوح بدون إغلاق
- استخدام علامة الطرح بدلاً من رمز السالب (أو العكس)
انظر أيضاً
مراجع
- ↑ هل المسألة تتعلق بالنحو أم بالدلالات؟
- 1 2 3 الأخطاء الدلالية في جافا
- ↑ أهو، ألفريد ف.؛ مونيكا س. لام؛ رافي سيثي؛ جيفري د. أولمان (2007). المترجمات: المبادئ والتقنيات والأدوات (الطبعة الثانية ). أديسون ويسلي. ISBN 978-0-321-48681-3.القسم 4.1.3: معالجة أخطاء بناء الجملة، الصفحات 194-195 .
- ↑ لودن، كينيث سي. (1997). بناء المترجمات: المبادئ والتطبيق . بروكس/كول. ISBN 981-243-694-4.التمرين 1.3، الصفحات 27-28 .
- ↑ أهو، ألفريد ف.؛ مونيكا س. لام؛ رافي سيثي؛ جيفري د. أولمان (2007). المترجمات: المبادئ والتقنيات والأدوات (الطبعة الثانية ). أديسون ويسلي. ISBN 978-0-321-48681-3.القسم 4.1.3: معالجة أخطاء بناء الجملة، الصفحات 194-195 .
- ↑ لودن، كينيث سي. (1997). بناء المترجمات: المبادئ والتطبيق . بروكس/كول. ISBN 981-243-694-4.التمرين 1.3، الصفحات 27-28 .
- بناء جملة لغة البرمجة
- أخطاء الحاسوب
- التحليل
- نظرية لغات البرمجة
