تمييز بناء الجملة

تمييز بناء جملة HTML

تمييز بناء الجملة ميزةٌ في محررات النصوص تُستخدم في لغات البرمجة ، وكتابة البرامج النصية ، ولغات الترميز ، مثل HTML . تعرض هذه الميزة النص، وخاصةً شفرة المصدر ، بألوان وخطوط مختلفة حسب فئة المصطلحات. [ 1 ] تُسهّل هذه الميزة الكتابة بلغة مُهيكلة كلغة برمجة أو لغة ترميز، حيث تكون كل من البنية وأخطاء بناء الجملة واضحةً بصريًا. كما تُستخدم هذه الميزة في العديد من السياقات المتعلقة بالبرمجة (مثل أدلة البرمجة)، سواءً في شكل كتب ملونة أو مواقع إلكترونية، لتسهيل فهم مقتطفات الشفرة على القراء. لا يؤثر التمييز على معنى النص نفسه؛ فهو مُخصص فقط لمساعدة القراء.

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

الفوائد العملية

إبراز تأثير غياب الفاصل (بعد watch='false) في جافا سكريبت

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

قيّمت دراسة نُشرت في مؤتمر PPIG تأثير تمييز بناء الجملة على فهم البرامج القصيرة، وخلصت إلى أن وجود تمييز بناء الجملة يقلل بشكل ملحوظ من الوقت الذي يستغرقه المبرمج لاستيعاب دلالات البرنامج. [ 2 ] بالإضافة إلى ذلك، أشارت البيانات التي جُمعت من جهاز تتبع العين خلال الدراسة إلى أن تمييز بناء الجملة يمكّن المبرمجين من التركيز بشكل أقل على المكونات النحوية القياسية مثل الكلمات المفتاحية.

دعم في محررات النصوص

تمييز بناء جملة روبي باستخدام TextMate

تتيح بعض محررات النصوص تصدير الترميز الملون بتنسيق مناسب للطباعة أو الاستيراد إلى برامج معالجة النصوص وغيرها من برامج تنسيق النصوص؛ على سبيل المثال، بتنسيق HTML أو LaTeX ملون أو PostScript أو RTF . توجد العديد من مكتبات أو "محركات" تمييز الصيغة التي يمكن استخدامها في تطبيقات أخرى، ولكنها ليست برامج كاملة بحد ذاتها، مثل إضافة Generic Syntax Highlighter (GeSHi) للغة PHP .

بالنسبة للمحررات التي تدعم أكثر من لغة، يمكن للمستخدم عادةً تحديد لغة النص، مثل C أو LaTeX أو HTML ، أو يمكن للمحرر التعرف عليها تلقائيًا بناءً على امتداد الملف أو من خلال مسح محتوياته. يُثير هذا الكشف التلقائي عن اللغة بعض المشكلات المحتملة. [ 3 ] على سبيل المثال، قد يرغب المستخدم في تحرير مستند يحتوي على:

  • أكثر من لغة واحدة (على سبيل المثال عند تحرير ملف HTML يحتوي على كود جافا سكريبت مضمن)،
  • لغة غير معترف بها (على سبيل المثال عند تحرير شفرة مصدرية للغة برمجة غامضة أو جديدة نسبياً)،
  • لغة تختلف عن نوع الملف (على سبيل المثال عند تحرير التعليمات البرمجية المصدرية في ملف بدون امتداد في محرر يستخدم امتدادات الملفات لاكتشاف اللغة).

في هذه الحالات، لا يكون من الواضح ما هي اللغة التي يجب استخدامها، وقد لا يتم تمييز المستند أو يتم تمييزه بشكل غير صحيح. بعض الأدوات، مثل Guesslang وPLangRec، مصممة لاكتشاف لغة البرمجة من شفرة المصدر. [ 3 ]

عناصر بناء الجملة

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

تُسمى هذه العملية بتزيين بناء الجملة ، حيث تعرض بعض المحررات أيضًا عناصر نحوية معينة بطرق أكثر إرضاءً من الناحية البصرية، على سبيل المثال عن طريق استبدال عامل المؤشر كما هو الحال ->في التعليمات البرمجية المصدرية برمز سهم فعلي (→)، أو تغيير أدلة تزيين النص مثل /مائل/، *غامق*، أو _تسطير_ في تعليقات التعليمات البرمجية المصدرية من خلال عرض مائل أو غامق أو مسطر فعلي .

أمثلة

فيما يلي مقارنة لمقتطف من كود لغة C :

عرض قياسيتمييز بناء الجملة
// مرحبا بالعالم #include <stdio.h> int main() { printf("Hello World\n"); أعد 0؛ } 
// مرحباً بالعالم #include <stdio.h>int main () { printf ( "Hello World \n " ); return 0 ; }

فيما يلي مقتطف آخر من كود C++ مع تمييز بناء الجملة:

استيراد std ؛باستخدام std :: array ؛ باستخدام std :: shared_ptr ؛constexpr size_t MAX_WINDOW_COUNT = 100 ;// إنشاء كائنات Window وتخزينها في windows: const int windowCount = 10 ; array < shared_ptr < Window > , MAX_WINDOW_COUNT > windows = {}; for ( size_t i = 0 ; i < windowCount ; ++ i ) { windows [ i ] = std :: make_shared < Window > (); }

في مثال لغة C++، يتعرف المحرر على العديد من الكلمات المفتاحية للغة C++ ويُبرزها . كما يتم تمييز التعليق في البداية بطريقة خاصة لتمييزه عن الكود العامل.

التاريخ والقيود

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

في عام ١٩٨٢، قدمت أنيتا هـ. كلوك وجان ب. شوداك براءة اختراع لأول نظام معروف لتلوين بناء الجملة، [ ٦ ] والذي استُخدم في ملحق نظام الكمبيوتر الترفيهي ( ECS) لجهاز إنتيليفيجن ، الذي صدر عام ١٩٨٣. [ ٧ ] كان هذا النظام يُبرز عناصر مختلفة من برامج لغة بيسك ، وقد طُبِّق في محاولة لتسهيل كتابة البرامج للمبتدئين، وخاصة الأطفال. [ ٨ ] لاحقًا، كان محرر التحليل المباشر ( LEXX )، الذي كُتب لنظام التشغيل VM لحوسبة قاموس أكسفورد الإنجليزي عام ١٩٨٥، من أوائل البرامج التي استخدمت تلوين بناء الجملة. أتاحت خاصية التحليل المباشر إمكانية إضافة محللات برمجية من قِبل المستخدم إلى المحرر، وذلك للنصوص والبرامج وملفات البيانات، وما إلى ذلك. [ 9 ] على الحواسيب الصغيرة ، كان برنامج MacPascal 1.0 (10 أكتوبر 1985) يتعرف على بنية لغة باسكال أثناء كتابتها، ويستخدم تغييرات الخط (مثل الخط الغامق للكلمات المفتاحية) لتمييز البنية على جهاز ماكنتوش أحادي اللون صغير الحجم، ويقوم تلقائيًا بترتيب المسافات البادئة للتعليمات البرمجية لتتوافق مع بنيتها. [ 10 ]

تستخدم بعض محررات النصوص وأدوات تنسيق الأكواد تقنيات مطابقة الأنماط (مثل التعابير النمطية ) لتلوين بناء الجملة، بدلاً من إنشاء محلل لكل لغة ممكنة. [ 11 ] قد ينتج عن ذلك نظام عرض نصوص يعرض تلوينًا غير دقيق لبناء الجملة، وفي بعض الحالات يكون أداؤه بطيئًا. يتمثل أحد الحلول التي تستخدمها محررات النصوص للتغلب على هذه المشكلة في عدم تحليل الملف بأكمله دائمًا، بل فقط الجزء المرئي منه، وأحيانًا يتم مسح النص عكسيًا لعدد محدود من الأسطر لـ"المزامنة".

من ناحية أخرى، يعرض المحرر في كثير من الأحيان التعليمات البرمجية أثناء إنشائها، بينما تكون غير مكتملة أو غير صحيحة، وستفشل المحللات الصارمة (مثل تلك المستخدمة في المترجمات) في تحليل التعليمات البرمجية في معظم الأوقات.

تُجري بعض بيئات التطوير المتكاملة الحديثة والمخصصة للغات برمجة محددة (على عكس محررات النصوص) تحليلًا كاملًا للغة، مما يُتيح فهمًا دقيقًا للغاية للكود. وقد أطلق ديفيد نولدين [ 12 ] على امتداد تمييز بناء الجملة اسم "التمييز الدلالي" في عام 2009 لبيئة التطوير المتكاملة مفتوحة المصدر للغة C++، KDevelop . فعلى سبيل المثال، يُمكن للتمييز الدلالي أن يُضفي على المتغيرات المحلية ألوانًا مميزة وفريدة لتحسين فهم الكود. وفي عام 2014، انتشرت فكرة المتغيرات المحلية الملونة على نطاق أوسع بفضل مقالٍ كتبه إيفان بروكس [ 13 ] ، وبعد ذلك، تم تطبيق هذه الفكرة في بيئات تطوير متكاملة أخرى شائعة مثل Visual Studio [ 14 ] و Xcode [ 15 ] وغيرها.

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

انظر أيضاً

مراجع

  1. جيم دانجو؛ شيري شافور؛ سكوت فيربراذر؛ دان كين؛ جون كيلرمان؛ بات مكارثي (2005). دليل مطور جافا إلى إكليبس (  الطبعة الثانية). بوسطن: أديسون-ويسلي. ISBN 978-0-321-30502-2.
  2. ساركار، أدفايت (2015). "تأثير تلوين بناء الجملة على فهم البرنامج" . وقائع المؤتمر السنوي السادس والعشرين لمجموعة الاهتمام بعلم نفس البرمجة : 49-58 . مؤرشف من الأصل في 24 سبتمبر 2015. تم الاطلاع عليه في 27 سبتمبر 2023 .
  3. 1 2 أوسكار رودريغيز-بريتو؛ أليخاندرو باتو؛ فرانسيسكو أورتين (2025). "PLangRec: نموذج تعلّم عميق للتنبؤ بلغة البرمجة من سطر واحد من التعليمات البرمجية" . أنظمة حاسوب الجيل القادم . 166 107640. إلسيفير. doi : 10.1016/j.future.2024.107640 .
  4. هانسن، ويلفريد ج. (1971). "مبادئ هندسة المستخدم للأنظمة التفاعلية". وقائع المؤتمر المشترك للخريف للحاسوب FJCC 39. AFIPS. الصفحات 5623-532 . 
  5. هانسن، ويلفريد. "إميلي - محرر للنصوص المنظمة" . تم الاطلاع عليه بتاريخ 17 يونيو 2013 .
  6. طريقة وجهاز تصحيح أخطاء بناء الجملة ، 29-10-1982 ، تم الاطلاع عليه بتاريخ 12-04-2018
  7. ماتيل إنتيليفيجن: دليل مالك وحدة الكمبيوتر إنتيليفيجن (1983) (ماتيل) (الولايات المتحدة الأمريكية) . 1983.
  8. "نظام ألعاب الفيديو الكلاسيكي من إنتليفيجن / نظام الكمبيوتر الترفيهي" . www.intellivisionlives.com . مؤرشف من الأصل بتاريخ 17 يوليو 2018. تم الاطلاع عليه بتاريخ 12 أبريل 2018 .
  9. كوليشو، إم إف (1987). "ليكس - محرر هيكلي قابل للبرمجة" (ملف PDF) . مجلة آي بي إم للبحوث والتطوير، المجلد 31، العدد 1، رقم طلب إعادة طبع آي بي إم G322-0151 . آي بي إم. 
  10. ألين، دان (10 أكتوبر 2011). "ثلاثية من الذكريات التاريخية" . mpw-dev (قائمة بريدية). مؤرشف من الأصل بتاريخ 21 أغسطس 2017. تم الاطلاع عليه بتاريخ 12 سبتمبر 2019 .
  11. "ملفات تعريف لغة KEDIT" . Kedit . مجموعة برامج مانسفيلد، 2012. تم الاطلاع عليه بتاريخ 7 أبريل 2016 .
  12. "منشور مدونة عام 2009 حول التمييز الدلالي الذي تم تقديمه في KDevelop بواسطة ديفيد نولدين" . 8 يناير 2009.
  13. بروكس، إيفان (17 أبريل 2017). "منشور مدونة عام 2014 حول التمييز الدلالي بقلم إيفان بروكس" . ميديوم .
  14. "مقال في مجلة Visual Studio حول التمييز الدلالي" .
  15. "صفحة GitHub الخاصة بمكوّن إضافي يُطبّق التمييز الدلالي لـ Xcode" . GitHub . 14 سبتمبر 2022.