ريبول

ريبول (بالإنجليزية: REBOL) هي لغة تبادل بيانات متعددة المنصات ولغة برمجة ديناميكية متعددة النماذج ، صممها كارل ساسينراث للاتصالات الشبكية والحوسبة الموزعة. 
ويطرح REBOL مفهوم اللغات الفرعية (اللهجات) dialect، وهي لغات عالية الكفاءة محدودة الاستخدام بحقول معينة domain-specific للأكواد والبيانات ، وهو ما يعد أبرز خواص اللغة وفقًا لمصممها.
«بالرغم من إمكانية استخدامها في البرمجة وتحرير الدوال وإنجاز عمليات المعالجة، إلا أن أكبر مواطن قوتها هو قدرتها على إنشاء لغات محدودة بحقول معينة أو ما نطلق عليه (لهجات) dialects» – كارل ساسينراث
وقد استخدم REBOL في برمجة عدد من تطبيقات الإنترنت (لأجهزة العميل والخادم) وتطبيقات قواعد البيانات والبرامج الخدمية وتطبيقات الوسائط المتعددة.

التاريخ

خرج أول إصدار من لغة الـ REBOL للنور في عام 1997، وقد صممت على مدار عشرين عامًا بواسطة (كارل ساسينراث)، وهو المهندس والمطور الرئيسي لنظام أميغا أو إس، وذلك قيامًا على دراسته للسيمانطيقا الدلالية denotational semantics ومستخدما مفاهيم من لغات برمجة الـ Lisp و Forth و Logo و Self.
REBOL 2، المترجم، والذي أصبح قلب إصدارات المترجم الموسعة، صدر لأول مرة في 1999.
REBOL/Comand، والذي أضاف تشفيرًا قوياً وأتاح الاتصالات بقواعد البيانات المفتوحة ODBC، صدر في سبتمبر 2000.
REBOL/View وصدر في إبريل 2001، حيث أضاف إمكانيات رسومية على رأس اللغة الرئيسية. 
REBOL/IOS، وهو بيئة تعاونية ممتدة تم بناءها مع REBOL وصدرت في أغسطس 2001.
REBOL/SDK، وقدّم خيار الأنوية kernels من أجل الربط، بالإضافة إلى معالج قبلي preprocessor، وصدر في ديسمبر 2002.
REBOL 3، وهو الإصدار الأحدث من المترجم REBOL interpreter، وهو قيد التطوير حالياً، والنسخ المكتملة منه موجودة في السوق منذ يناير 2008.

بناء اللغة (السينتاكس)

تتسم لغة الـ REBOL بأنها من لغات البرمجة ذات الشكل الحر free-form، بمعنى أنها لا تحتاج لمواضع خاصة. ورغم ذلك، ينصح بمراعاة الازاحة المتناسبة بين السطور (indentation) من أجل نقل أفضل لهيكل النص للقارئ البشري. 
وقد تتباين الخصائص البنائية للهجات المختلفة. والمنصة المشتركة لكافة لهجات الـ REBOL هي (لهجة لتبادل البيانات)؛ وهناك لهجات أخرى مشتقة منها. وبالإضافة لكونها المنصة المشتركة لكافة اللهجات، فإن (لهجة تبادل البيانات) تستخدم مباشرة لتمثيل البيانات والميتابيانات، وتجميع أبنية البيانات، وإرسال البيانات على الإنترنت، وحفظها في مجمع لتخزين البيانات. 
وعلى خلاف لغات البرمجة مثل سي C، نجد أن (لهجة تبادل البيانات) لا تتألف من إعلانات أو تعليمات أو صيغ أو كلمات مفتاحية. ويتخذ التيار النصي لـ (لهجة تبادل البيانات) شكل شجرة بيانات تتألف من كتل (والكتلة الجذرية تكون ضمنية implicit، فيما الكتل الفرعية يحدّ منها الأقواس المربعة "[]")، والسلاسل الحرفية strings (والتي تكون محدودة بعلامات الاقتباس المزدوجة "" أو بالأقواس المجعدة {} مناسبة للسلاسل متعددة الأسطر؛ مع استخدام علامات الإقحام مع الأحرف غير القابلة للطباعة) وعنوان الإنترنت URLs أو عناوين البريد الإلكتروني e-mail أو الملفات أو المسارات أو غيرها من القيم المُركّبة composite values. وعلى خلاف الكتل البرمجية للـ ALGOL، نجد أن كتل الـ REBOL هي قيم مركّبة مشابهة للصيغ الرمزية s-expressions في لغة الـ Lisp. 
وتحتوى الكتل البرمجية blocks بالإضافة إلى الأقواس على قيم مُركّبة أخرى (وقد تحتوي الكتلة البرمجية على كتل فرعية وأقواس وسلاسل حرفية ...) أو قيم قياسية scalar مثل الكلمات أو الـ set-words (وهي الكلمات التي تلحقها في النهاية نقطتي الترقيم ":") أو الـ get-words (وهي الكلمات التي تسبقها نقطتي الترقيم) أو الـ lit-words (وهي الكلمات التي تسبقها الفاصلة العُليا) أو الأرقام أو النقود أو الحروف الخ، وتفصل بينها مساحات فارغة. ولاحظ أن الحروف الخاصة مسموح بها في الكلمات، ولذلك نجد أن a+b تمثل كلمة، فيما a + b ليست كذلك، لأنها تمثل تتابعًا لثلاث كلمات تفصل فيما بينها مساحات فارغة. 
وقد تظهر التعليقات comments بعد علامة الفاصلة المنقوطة ";" حتى نهاية السطر. ويمكن كتابة التعليقات متعددة الأسطر أو التعليقات التي لا يتجاهلها المعرّب المُعجمي lexical parser باستخدام أنواع البيانات "العاديّة" مثل السلاسل الحرفية متعددة الأسطر.

المعاني

يمكن تقديم الكتل المحتوية على اللغة المحددة بحقل معين كوسائط arguments إلى دوال تقييم evaluator معينة.

Parse

دالة parse من الدوال المفضلة لتحليل وترجمة اللهجات حيث تقوم بمطابقة صيغ الإعراب parse expressions في زمن التشغيل. 
وتُكتب صيغ الإعراب parse expressions في لهجة الإعراب parse dialect، والتي تعتبر – وعلى غِرار اللغة do – لهجة موجهة بالصيغ. ومن خلال خلال لهجة الـ do، تستعين لغة الإعراب parse بكلمات مفتاحية تمثل المؤثرات والرموز اللانهائية nonterminals الأكثر أهمية، ولا تحتوي المؤثرات وسطية الإعراب على ما يكافئها من البوادئ prefixes وتستخدم قواعد الأسبقية (حيث نجد أن لـ sequence أسبقية أعلى من choice).
ويمكن تضمين الإجراءات للأخذ بها أثناء عملية الإعراب أيضاً، كما يمكن استخدام دالة الـ parse لمعالجة الكتل البرمجية أو السلاسل الحرفية. وعند مستوى إعراب السلاسل الحرفية string parsing، ينبغي على الدالة إجراء عملية الإعراب "منخفضة المستوى"، بالأخذ في الاعتبار الحروف والحدود الفاصلة delimiters. وينتمي إعراب الكتل البرمجية block parsing للمستوى الأعلى، حيث يتضمن عملية المسح على مستوى قيم الـ REBOL. 
وتنتمي لهجة الإعراب لعائلة القواعد البرمجية والتي تمثلها لغة الإعراب التنازلية top-down parsing أو قواعد صيغ الإعراب parsing expression grammar. ويتمثل التشابه الرئيسي في وجود مؤثرات الـ sequence و choice الموجودة لدى كل أفراد عائلة القواعد. ويتضح بناء وتركيب لغة الإعراب والتشابه بين لهجة الإعراب والـ PEG من خلال هذه الترجمة الصوتية لأحد الأمثلة على الـ PEG والتي تقوم بإعراب إحدى الصيغ الحسابية:
Digit: charset [#"0" - #"9"]
Value: [some Digit | "(" Expr ")"]
Product: [Value any [["*" | "/"] Value]]
Sum: [Product any [["+" | "-"] Product]]
Expr: Sum
parse/all "12+13" Expr

مثال

يمكن مثلاً عرض نافذة برنامج أهلا بالعالم التجريبية الشهيرة من خلال كتابة السطر البرمجي التالي:
view/title layout [h1 250x120 center middle "Hello world !"] "Hello world !"
وتُكتب محتويات وسيط الكتلة البرمجية لدالة layout في لغة الواجهة المرئية visual interface dialect.