الثنائيات والثلاثيات (البرمجة)
في برمجة الحاسوب ، تعتبر الثنائيات والثلاثيات عبارة عن تسلسلات من حرفين وثلاثة أحرف على التوالي، والتي تظهر في شفرة المصدر ، ووفقًا لمواصفات لغة البرمجة ، يجب التعامل معها كما لو كانت أحرفًا مفردة.
توجد أسباب عديدة لاستخدام الثنائيات والثلاثيات: فقد لا تحتوي لوحات المفاتيح على مفاتيح تغطي مجموعة الأحرف الكاملة للغة، وقد يكون إدخال الأحرف الخاصة صعبًا، وقد تحتفظ برامج تحرير النصوص ببعض الأحرف لاستخدامات خاصة، وما إلى ذلك. كما يمكن استخدام الثلاثيات في بعض صفحات ترميز EBCDIC التي تفتقر إلى أحرف مثل و .{}
تاريخ
تُعدّ مجموعة الأحرف الأساسية للغة البرمجة C مجموعة فرعية من مجموعة أحرف ASCII ، وتتضمن تسعة أحرف لا تندرج ضمن مجموعة الأحرف الثابتة ISO 646. قد يُشكّل هذا مشكلةً عند كتابة الشيفرة المصدرية عندما لا يدعم الترميز (وربما لوحة المفاتيح ) المستخدم حرفًا واحدًا أو أكثر من هذه الأحرف التسعة. وقد ابتكرت لجنة ANSI C الأحرف الثلاثية كوسيلة لإدخال الشيفرة المصدرية باستخدام لوحات المفاتيح التي تدعم أي إصدار وطني من مجموعة أحرف ISO 646. [ 1 ]
مع الانتشار الواسع لـ ASCII و Unicode / UTF-8 ، أصبح استخدام الأحرف الثلاثية محدودًا اليوم، وتمت إزالة دعم الأحرف الثلاثية من لغة C اعتبارًا من الإصدار C23. [ 2 ]
التطبيقات
لا تُصادف التراكيب الثلاثية عادةً خارج مجموعات اختبار المُصرّفات . [ 3 ] تدعم بعض المُصرّفات خيارًا لإيقاف التعرّف على التراكيب الثلاثية، أو تعطيلها افتراضيًا مع اشتراط وجود خيار لتفعيلها. يُمكن لبعضها إصدار تحذيرات عند مصادفة التراكيب الثلاثية في ملفات المصدر. وفّرت شركة بورلاند برنامجًا منفصلاً، وهو مُعالج التراكيب الثلاثية المُسبق ، لاستخدامه فقط عند الرغبة في معالجة التراكيب الثلاثية (وكان الهدف من ذلك زيادة سرعة التجميع إلى أقصى حد).TRIGRAPH.EXE
الدعم اللغوي
تحدد الأنظمة المختلفة مجموعات مختلفة من الرسوم البيانية الثنائية والثلاثية، كما هو موضح أدناه.
ألغول
سبقت الإصدارات الأولى من لغة ALGOL مجموعات الأحرف القياسية ASCII وEBCDIC، وكانت تُنفذ عادةً باستخدام رمز حرفي سداسي البت خاص بكل مُصنِّع . افتقرت العديد من عمليات ALGOL إما إلى نقاط ترميز في مجموعة الأحرف المتاحة أو لم تكن مدعومة من قِبل الأجهزة الطرفية، مما أدى إلى عدد من عمليات الاستبدال، بما في ذلك :=الاستبدال ←(للتخصيص) >=والاستبدال ≥(أكبر من أو يساوي).
باسكال
تدعم لغة البرمجة باسكال الرسوم البيانية الموجهة (digraphs ) و و و لـ و و على التوالي. على عكس جميع الحالات الأخرى المذكورة هنا، كانت ولا تزال هذه الرسوم البيانية الموجهة شائعة الاستخدام. مع ذلك، تتعامل معها العديد من المترجمات كنوع مختلف من كتل التعليقات بدلاً من كونها رسومًا بيانية موجهة فعلية، أي أنه لا يمكن إنهاء تعليق يبدأ بـ بـ و العكس.(..)(**)[]{}(**)(*}
ج
لغة البرمجة J هي لغة فرعية من لغة APL، لكنها تستخدم مجموعة أحرف ASCII بدلاً من رموز APL . ولأن نطاق الأحرف القابلة للطباعة في ASCII أصغر من مجموعة رموز APL المتخصصة، تُستخدم أحرف .النقطة (.) والنقطتين :(.) لتفسير رموز ASCII، مما يؤدي فعلياً إلى تفسير الأحرف المفردة أو الثنائية أو الثلاثية (نادراً) كرموز مستقلة. [ 4 ]
على عكس استخدام الرسوم البيانية الثنائية والثلاثية في لغتي C و C++ ، لا توجد مكافئات أحادية الحرف لهذه في لغة J.
ج
| ثلاثي | مقابل |
|---|---|
??= | # |
??/ | \ |
??' | ^ |
??( | [ |
??) | ] |
??! | | |
??< | { |
??> | } |
??- | ~ |
يقوم المعالج المسبق للغة C (المستخدم للغة C مع اختلافات طفيفة في لغة C++ ؛ انظر أدناه ) باستبدال جميع حالات تسلسلات الأحرف الثلاثية التسعة في هذا الجدول بمكافئاتها المكونة من حرف واحد قبل أي معالجة أخرى (حتى C23 [ 2 ] ). [ 5 ] [ 6 ]
قد يرغب المبرمج في وضع علامتي استفهام متتاليتين دون أن يتعامل معهما المُصرّف على أنهما يُدخلان حرفًا ثلاثيًا. لا تسمح قواعد لغة C برمزين متتاليين ?، لذا فإن المواضع الوحيدة في ملف C التي يُمكن فيها استخدام علامتي استفهام متتاليتين هي الثوابت متعددة الأحرف، والسلاسل النصية ، والتعليقات. تُشكّل هذه مشكلة خاصة لنظام التشغيل Mac OS الكلاسيكي'????' ، حيث يُمكن استخدام الثابت كنوع ملف أو مُنشئ . [ 7 ] لوضع علامتي استفهام متتاليتين بأمان داخل سلسلة نصية، يُمكن للمبرمج استخدام دمج السلاسل النصية "...?""?..."أو تسلسل الهروب"...?\?..." .
???لا يمثل في حد ذاته تسلسلًا ثلاثيًا، ولكن عند اتباعه بحرف مثل -ذلك، سيتم تفسيره على أنه ?+ ??-، والذي يصبح ?~.
يمكن استخدام الثلاثية ??/لإدخال سطر جديد مُهَرَّب لربط الأسطر؛ ويجب مراعاة ذلك لضمان معالجة الثلاثيات بشكل صحيح وفعال داخل المعالج المسبق. كما يمكن أن تُسبب هذه الثلاثية مشاكل غير متوقعة، خاصةً في التعليقات. على سبيل المثال:
// هذا كله مجرد تعليق واحد!؟؟؟/ a ++ ;وهو عبارة عن سطر تعليق منطقي واحد (يستخدم في لغتي C++ و C99 )، و
/??/ * تعليق *?? / /وهو تعليق كتلة مُصاغ بشكل صحيح. يمكن استخدام هذا المفهوم للتحقق من وجود ثلاثيات كما في مثال C99 التالي، حيث سيتم تنفيذ عبارة إرجاع واحدة فقط.
// تُرجع القيمة false أو true؛ معيار اللغة C99 أو أحدث bool trigraphsAvailable () { // هل الترايغرافات متوفرة؟/ return false ; return true ; }| حرفان مزدوجان | مقابل |
|---|---|
<: | [ |
:> | ] |
<% | { |
%> | } |
%: | # |
في عام 1994، تم تضمين تعديل معياري لمعيار C، C95 ، [ 8 ] [ 9 ] في C99، وقدم الرسوم البيانية المزدوجة كبدائل أكثر قابلية للقراءة لخمسة من الرسوم البيانية الثلاثية.
على عكس الرسوم البيانية الثلاثية، تُعالج الرسوم البيانية الثنائية أثناء عملية التجزئة ، ويجب أن يُمثل أي رسم بياني ثنائي رمزًا كاملاً بمفرده، أو أن يُكوّن الرمز %:%:الذي يحل محل رمز الربط الخاص بالمعالج المسبق ##. إذا ظهر تسلسل رسم بياني ثنائي داخل رمز آخر، مثل سلسلة نصية مُقتبسة، أو ثابت حرفي، فلن يتم استبداله.
لغة سي++
تتصرف لغة C++ (حتى C++14 ، انظر أدناه ) مثل لغة C، بما في ذلك إضافات C99. [ 10 ]
ملاحظة: %:%:يتم التعامل معها كرمز واحد، بدلاً من كونها حالتين من %:.
في التسلسل، <::إذا لم يكن الحرف التالي هو :أو >، <فسيتم التعامل مع كرمز معالجة مسبقة بحد ذاته وليس كأول حرف من الرمز البديل <:. يتم ذلك حتى لا تتعطل بعض استخدامات القوالب بسبب الاستبدال.
يُقدم معيار C++ هذا التعليق فيما يتعلق بمصطلح "الرسم البياني الموجه": [ 11 ]
مصطلح "الرسم الثنائي" (الرمز المكون من حرفين) ليس وصفًا دقيقًا تمامًا، إذ أن أحد رموز المعالجة المسبقة البديلة هو كذلك،
%:%:وبالطبع تحتوي العديد من الرموز الأساسية على حرفين. ومع ذلك، تُعرف هذه الرموز البديلة التي ليست كلمات مفتاحية معجمية بالعامية باسم "الرسوم الثنائية".
تم اقتراح إيقاف استخدام الترايغرافات في C++0x ، التي صدرت لاحقًا باسم C++11 . [ 12 ] عارضت شركة IBM هذا الاقتراح ، متحدثةً باسمها وباسم مستخدمي C++ الآخرين، [ 13 ] ونتيجةً لذلك، تم الإبقاء على الترايغرافات في C++11. ثم اقتُرح مجددًا إزالة الترايغرافات (وليس إيقاف استخدامها فقط) في C++17 . [ 14 ] وقد حظي هذا الاقتراح بموافقة اللجنة، وتمت إزالة الترايغرافات (وليس الرموز الإضافية) من C++17 على الرغم من معارضة IBM. [ 15 ] يمكن دعم الشيفرة البرمجية الحالية التي تستخدم الترايغرافات عن طريق ترجمتها من ملفات المصدر (تحليل الترايغرافات) إلى مجموعة أحرف المصدر الأساسية التي لا تتضمن الترايغرافات. [ 14 ]
RPL
تدعم آلات حاسبة هيوليت-باكارد التي تدعم لغة RPL وطريقة الإدخال الخاصة بها عددًا كبيرًا من الرسوم البيانية الثلاثية (المعروفة أيضًا برموز TIO ) لنسخ أحرف ASCII غير المكونة من سبعة بتات من مجموعة الأحرف الموسعة للآلات الحاسبة [ 16 ] [ 17 ] [ 18 ] بدقة على المنصات الأجنبية، ولتسهيل إدخال البيانات عبر لوحة المفاتيح دون الحاجة إلى استخدام تطبيق CHARS . [ 19 ] [ 20 ] [ 17 ] [ 18 ] الحرف الأول من جميع رموز TIO هو \، متبوعًا بحرفين آخرين من ASCII يشبهان إلى حد ما الرمز المراد استبداله. [ 19 ] [ 20 ] [ 17 ] [ 18 ] [ 21 ] يمكن إدخال جميع الأحرف الأخرى باستخدام صيغة رمز TIO الخاصة، حيث يمثل nnn عددًا عشريًا\nnn مكونًا من ثلاثة أرقام (مع أصفار بادئة إذا لزم الأمر) لنقطة الرمز المقابلة (وبالتالي يمثل رسميًا رسمًا بيانيًا رباعيًا ). [ 19 ] [ 17 ] [ 18 ]
دعم التطبيقات
همة
يدعم محرر النصوص Vim الثنائيات لإدخال الأحرف النصية، وفقًا لمعيار RFC 1345. ويرتبط إدخال الثنائيات بالرمز + افتراضيًا. [ 22 ] ويمكن عرض قائمة بجميع الثنائيات الممكنة في Vim بكتابة . CtrlK:dig
برنامج جنو سكرين
يحتوي برنامج GNU Screen على أمر ثنائي الحروف، مرتبط افتراضياً بالمفتاح + + . [ 23 ]CtrlACtrlV
زهرة اللوتس
يستخدم برنامج Lotus 1-2-3 لنظام التشغيل MS-DOS علامة + كمفتاح للتكوين للسماح بإدخال أسهل للعديد من الأحرف الخاصة من مجموعة الأحرف الدولية لوتس (LICS) [ 24 ] ومجموعة الأحرف متعددة البايت لوتس (LMBCS).AltF1
انظر أيضاً
- مفتاح AltGr – مفتاح تعديل في بعض لوحات مفاتيح الكمبيوتر
- رموز بديلة بلغة C – رأس مكتبة C القياسية الذي يوفر مجموعة من التهجئات البديلة للمعاملات الشائعة
- مفتاح التأليف – مفتاح الكمبيوتر لبدء دمج الأحرف الرسومية
- مفتاح ميت – نوع خاص من مفاتيح تعديل لوحة المفاتيح
- تسلسل الهروب – سلسلة من الأحرف ذات معنى خاص
- تسلسلات الهروب في لغة C - تسلسلات الأحرف الخاصة في لغة البرمجة C
- قائمة بمراجع كيانات الأحرف في XML و HTML
مراجع
- ↑ الأساس المنطقي للمعيار الدولي - لغات البرمجة - لغة C (ملف PDF) . المراجعة 5.10. الصفحات 20-21 .
- 1 2 "إزالة الثلاثيات؟!" (ملف PDF) .
- ↑ جونز، ديريك م. "الجملة 117". معيار C الجديد: تعليق اقتصادي وثقافي .
- ↑ هوي، روجر. "المفردات" . jsoftware.com . مؤرشف من الأصل بتاريخ 2019-04-02 . تم الاطلاع عليه بتاريخ 2015-04-16 .
- ↑ معهد المعايير البريطانية (2003). معيار C - يتضمن TC1 - BS ISO/IEC 9899:1999 . جون وايلي وأولاده . ISBN 0-470-84573-2.
- ↑ "الأساس المنطقي للمعيار الدولي - لغات البرمجة - لغة C" (ملف PDF) . 5.10 أبريل 2003. مؤرشف (ملف PDF) من الأصل بتاريخ 2016-06-06 . تم الاطلاع عليه بتاريخ 2010-10-17 .
- ↑ "أساسيات الملفات" . whitefiles.org . تم الاطلاع عليه بتاريخ 2024-05-08 .
- ↑ ISO/IEC 9899:1990/Amd 1:1995 - لغات البرمجة - لغة C - التعديل 1: سلامة لغة C. مارس 1995. تاريخ الاسترجاع : 30 مايو 2024 .
- ↑ كلايف دي دبليو فيذر (2010-09-12). "وصف موجز للملحق المعياري 1" .
- ↑ ستروستروب، بيارن (29 مارس 1994). تصميم وتطور لغة C++ ( الطبعة الأولى). شركة أديسون-ويسلي للنشر . رقم ISBN 0-201-54330-3.
- ↑ دو تويت، ستيفانوس، محرر. (16 يناير 2012). "مسودة عمل، معيار للغة البرمجة C++" (ملف PDF) . N3337. مؤرشف (ملف PDF) من الأصل بتاريخ 8 مايو 2019. تم الاطلاع عليه بتاريخ 8 مايو 2019 .
- ↑ "C++0X، CD 1، تعليقات الهيئة الوطنية" (ملف PDF) . 30 يناير 2009. SC22/WG21 N2837 تعليق المملكة المتحدة 11. مؤرشف (ملف PDF) من الأصل بتاريخ 1 أغسطس 2017. تم الاطلاع عليه بتاريخ 12 مايو 2019 .
- ↑ وونغ، مايكل؛ تونغ، هوبرت؛ كلارير، روبرت؛ ماكنتوش، إيان؛ ماك، ريموند؛ كامبلي، كريستوفر؛ لابونتي، آلان (19 يونيو 2009). "تعليق على اقتراح إلغاء الأحرف الثلاثية" (ملف PDF) . N2910. مؤرشف (PDF) من الأصل بتاريخ 1 أغسطس 2017. تم الاطلاع عليه بتاريخ 12 مايو 2019 .
- 1 2 سميث، ريتشارد (2014-05-06). "إزالة الثلاثيات؟!" . N3981. مؤرشف من الأصل في 2018-07-09 . تم الاسترجاع في 2019-05-12 .
- ↑ وونغ، مايكل؛ تونغ، هوبرت؛ بهاكتا، راجان؛ إنجليس، ديريك (10 أكتوبر 2014). "تعليق من شركة IBM حول الاستعداد لمستقبلٍ خالٍ من دعم Trigraph في لغة C++17" (ملف PDF) . ورقة بحثية من IBM رقم N4210. مؤرشفة (ملف PDF) من الأصل بتاريخ 11 سبتمبر 2018. تم الاطلاع عليها بتاريخ 12 مايو 2019 .
- ↑ طابعة HP 82240B بالأشعة تحت الحمراء ( الطبعة الأولى). كورفاليس، أوريغون، الولايات المتحدة الأمريكية: هيوليت-باكارد . أغسطس 1989. رقم إعادة طلب HP 82240-90014.
- 1 2 3 4 سلسلة HP 48G - دليل المستخدم ( الطبعة الثامنة ). هيوليت-باكارد . ديسمبر 1994 [1993]. الصفحات 2-5 ، 27-16 . HP 00048-90126، (00048-90104). مؤرشف من الأصل بتاريخ 2016-08-06 . تم الاطلاع عليه بتاريخ 2015-09-06 .
- دليل المستخدم المتقدم (AUR) (الطبعة الثانية) لآلة حاسبة بيانية HP 50g / 49g+ / 48gII. هيوليت - باكارد . 14 يوليو 2009 [ 2005]. الصفحات J-1، J-2. HP F2228-90010. مؤرشف من الأصل بتاريخ 8 يوليو 2018. تم الاطلاع عليه بتاريخ 10 أكتوبر 2015 . ملف PDF قابل للبحث
- 1 2 3 "جدول HP RPL TIO" . holyjoe.org . مؤرشف من الأصل بتاريخ 23-05-2016 . تم الاطلاع عليه بتاريخ 23-01-2015 .
- 1 2 هاينز، الأب، مايكل دبليو. (2005). "HP-ASCII والثلاثيات" . مؤرشف من الأصل في 2016-08-02 . تم الاسترجاع في 2016-08-02 .
- ↑ فينسيث، كريج أ. (25-02-2012). "الشخصيات" . مؤرشف من الأصل في 21-12-2017 . تم الاسترجاع في 21-12-2017 .
- ↑ "توثيق Vim: *digraphs-default*" . 15 يناير 2011. مؤرشف من الأصل في 20 ديسمبر 2018. تم الاطلاع عليه في 12 مايو 2019 .
- ↑ "دليل مستخدم شاشة Digraph" . مؤرشف من الأصل بتاريخ 31-12-2018 . تم الاطلاع عليه بتاريخ 12-05-2019 .
- ↑ "الملحق و". دليل مستخدم HP 95LX (ملف PDF) ( الطبعة الثانية). كورفاليس، أوريغون، الولايات المتحدة الأمريكية: شركة هيوليت-باكارد ، قسم كورفاليس. يونيو 1991 [مارس 1991]. F0001-90003. مؤرشف (ملف PDF) من الأصل بتاريخ 28 نوفمبر 2016. تم الاطلاع عليه بتاريخ 27 نوفمبر 2016 .
روابط خارجية
- لغة البرمجة سي
- ترميز الأحرف
- المدخلات/المخرجات
