سنوبول

سنوبول ( لغة موجهة نحو السلاسل النصية والرمزية ) هي سلسلة من لغات البرمجة طُوِّرت بين عامي 1962 و1967 في مختبرات AT&T Bell بواسطة ديفيد ج. فاربر ، ورالف غريسولد، وإيفان ب. بولونسكي، وتُوِّجت بإصدار سنوبول 4. كانت سنوبول واحدة من عدة لغات موجهة نحو السلاسل النصية طُوِّرت خلال الخمسينيات والستينيات من القرن العشرين؛ ومن بينها أيضًا كوميت وتراك . على الرغم من تشابه الاسم ، إلا أنها تختلف تمامًا عن كوبول .

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

تم تدريس SNOBOL4 على نطاق واسع في الجامعات الأمريكية الكبيرة في أواخر الستينيات وأوائل السبعينيات، وتم استخدامها على نطاق واسع في السبعينيات والثمانينيات كلغة لمعالجة النصوص في العلوم الإنسانية .

في ثمانينيات وتسعينيات القرن العشرين، تراجع استخدام أنماط SNOBOL4 مع ظهور لغات برمجة أحدث مثل AWK و Perl، والتي جعلت معالجة السلاسل النصية باستخدام التعابير النمطية رائجة. تتضمن أنماط SNOBOL4 طريقة للتعبير عن قواعد BNF ، وهي مكافئة لقواعد اللغة الخالية من السياق، وأكثر قوة من التعابير النمطية. [ 2 ] في الواقع، تُعد "التعابير النمطية" في الإصدارات الحالية من AWK وPerl امتدادًا للتعابير النمطية بالمعنى التقليدي ، ولكن التعابير النمطية، على عكس أنماط SNOBOL4، ليست تكرارية، مما يمنح أنماط SNOBOL4 ميزة حسابية واضحة. [ 3 ] (مع ذلك، ظهرت التعابير التكرارية في Perl 5.10 ، الذي صدر في ديسمبر 2007. [ 4 ] [ 5 ] )

تم تصميم لغتي SL5 (1977) [ 6 ] و Icon (1978) اللاحقة بواسطة Griswold لدمج التراجع عن مطابقة نمط SNOBOL4 مع هيكلة ALGOL القياسية.

تطوير

سنوبول 1

تم ابتكار لغة SNOBOL في البداية كأداة يستخدمها مطوروها للتعامل مع التلاعب الرمزي بالمعادلات متعددة الحدود. كُتبت بلغة التجميع لجهاز IBM 7090. تميزت ببنية بسيطة، ونوع بيانات واحد فقط هو السلسلة النصية، وخلوها من الدوال والتصريحات، بالإضافة إلى محدودية آليات التحكم في الأخطاء. مع ذلك، ورغم بساطتها وطبيعتها "الشخصية"، بدأ استخدامها ينتشر بين مجموعات أخرى. ونتيجة لذلك، قرر مطوروها تطويرها وتحسينها.

سنوبول 2

كان برنامج SNOBOL2 موجودًا بالفعل، ولكنه كان إصدارًا تطويريًا وسيطًا قصير الأجل بدون وظائف محددة من قبل المستخدم ولم يتم إصداره أبدًا.

سنوبول 3

أُعيدت كتابة لغة SNOBOL لإضافة وظائف، قياسية ومُعرّفة من قِبل المستخدم، وأُصدرت النتيجة باسم SNOBOL3. لاقت SNOBOL3 رواجًا كبيرًا، وأُعيدت كتابتها لأجهزة حاسوب أخرى غير IBM 7090 من قِبل مبرمجين آخرين. ونتيجةً لذلك، ظهرت عدة لهجات غير متوافقة.

سنوبول 4

مع ازدياد شعبية لغة SNOBOL3، تلقى مطوروها طلبات متزايدة لإضافة امتدادات إليها. كما بدأت تظهر شكاوى حول عدم التوافق والأخطاء في إصدارات لم يكتبوها. ولمعالجة هذه المشكلة، والاستفادة من الحواسيب الجديدة التي ظهرت في أواخر الستينيات، تم اتخاذ قرار بتطوير SNOBOL4 مع العديد من أنواع البيانات والميزات الإضافية، ولكن بالاعتماد على آلة افتراضية لتحسين قابلية نقلها بين الحواسيب. [ 7 ] مع ذلك، كُتب مترجم لغة SNOBOL4 بلغة التجميع. ولكن استُخدمت ميزات الماكرو في المُجمِّع لتعريف تعليمات الآلة الافتراضية للغة تنفيذ SNOBOL ( SIL ) . وقد حسّن هذا بشكل كبير من قابلية نقل اللغة، إذ سهّل نقل الآلة الافتراضية التي تستضيف المترجم ، وذلك بإعادة إنشاء تعليماتها الافتراضية على أي جهاز يتضمن مُجمِّع ماكرو أو لغة برمجة عالية المستوى. [ 8 ]

نشأت لغة SIL المستقلة عن الآلة كتعميم لوحدات معالجة السلاسل النصية التي وضعها دوغلاس ماكلروي ، والتي استُخدمت على نطاق واسع في تطبيق SNOBOL الأولي. وفي عام 1969، أثّر ماكلروي على اللغة مرة أخرى بإصراره على إضافة نوع الجدول إلى SNOBOL4. [ 9 ] [ 10 ]

ميزات SNOBOL4

تتميز لغة SNOBOL بشكلها وأسلوب برمجتها، وهما يختلفان اختلافًا جذريًا عن لغات البرمجة الإجرائية المعاصرة مثل Fortran و ALGOL .

يدعم SNOBOL4 عددًا من أنواع البيانات المدمجة ، مثل الأعداد الصحيحة والأعداد الحقيقية ذات الدقة المحدودة ، والسلاسل النصية ، والأنماط ، والمصفوفات ، والجداول (المصفوفات الترابطية)، كما يسمح للمبرمج بتعريف أنواع بيانات إضافية ووظائف جديدة . كانت ميزة تعريف أنواع البيانات من قِبل المبرمج في SNOBOL4 متقدمة في ذلك الوقت ، وهي مشابهة لسجلات لغتي البرمجة COBOL السابقة و Pascal اللاحقة .

جميع أوامر SNOBOL تأتي على الشكل التالي

نمط موضوع التسمية = الكائن : نقل

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

يمكن أن يكون نمط SNOBOL بسيطًا للغاية أو معقدًا جدًا. النمط البسيط هو مجرد سلسلة نصية (مثل "ABCD")، بينما قد يكون النمط المعقد بنية كبيرة تصف، على سبيل المثال، القواعد النحوية الكاملة للغة برمجة. من الممكن تنفيذ مترجم لغة في SNOBOL مباشرةً تقريبًا من تعبير Backus-Naur الخاص به، مع تغييرات طفيفة. قد يتطلب إنشاء مُجمِّع ماكرو ومترجم لقطعة عتاد نظرية تمامًا بضع مئات من الأسطر فقط، مع إضافة تعليمة جديدة بسطر واحد.

تُتيح أنماط SNOBOL المعقدة إمكانية تنفيذ مهام يصعب أو يستحيل إنجازها باستخدام التعابير النمطية البسيطة المُستخدمة في معظم لغات مطابقة الأنماط الأخرى. يستمد جزء من هذه الإمكانيات من ما يُسمى "امتدادات SPITBOL" (التي أُدمجت لاحقًا في جميع التطبيقات الحديثة للغة SNOBOL 4 الأصلية تقريبًا)، مع العلم أنه من الممكن تحقيق نفس الإمكانيات بدونها. ويعود جزء آخر من هذه الإمكانيات إلى التأثيرات الجانبية التي يُمكن إنتاجها أثناء عملية مطابقة الأنماط، بما في ذلك حفظ العديد من نتائج المطابقة الوسيطة/المؤقتة، وإمكانية استدعاء دوال يكتبها المستخدم أثناء عملية المطابقة، والتي يُمكنها تنفيذ أي معالجة مطلوبة تقريبًا، ومن ثم التأثير على مسار عملية المطابقة المُقاطعة، أو حتى تغيير النمط نفسه أثناء عملية المطابقة. يُمكن حفظ الأنماط كأي عنصر بيانات أساسي آخر، كما يُمكن دمجها واستخدامها ضمن أنماط أخرى، بالإضافة إلى استخدامها لإنشاء تعابير نمطية بالغة التعقيد والتطور. من الممكن كتابة نمط SNOBOL4، على سبيل المثال، والذي يطابق "اسمًا كاملاً وعنوان بريدي دولي"، وهو أمر يتجاوز بكثير أي شيء عملي يمكن حتى محاولة القيام به باستخدام التعبيرات النمطية.

تستخدم لغة SNOBOL4 خوارزمية التراجع في مطابقة الأنماط، وهي خوارزمية مشابهة لتلك المستخدمة في لغة البرمجة المنطقية Prolog ، والتي توفر بنى شبيهة بالأنماط عبر قواعد النحو الموزعة (DCGs) . هذه الخوارزمية تجعل استخدام SNOBOL كلغة برمجة منطقية أسهل من معظم اللغات الأخرى.

يقوم برنامج SNOBOL بتخزين المتغيرات والسلاسل وهياكل البيانات في كومة واحدة يتم جمعها بواسطة عملية جمع البيانات المهملة .

برامج نموذجية

قد يكون برنامج "مرحباً بالعالم!" على النحو التالي...

الناتج = "مرحباً بالعالم!" النهاية

برنامج بسيط يطلب اسم المستخدم ثم يستخدمه في جملة إخراجية...

الناتج = "ما اسمك؟" اسم المستخدم = المدخل الناتج = "شكرًا لك،" اسم المستخدم النهاية

استخدم :S (التفرع عند التطابق الناجح) للاختيار من بين ثلاثة مخرجات محتملة...

الناتج = "ما اسمك؟" اسم المستخدم = إدخال اسم المستخدم "J" : S ( حب ) اسم المستخدم "K" : S ( كره ) MEH الناتج = "مرحباً،" اسم المستخدم :( نهاية ) حب الناتج = "تشرفنا بلقائك،" اسم المستخدم :( نهاية ) كره الناتج = "أوه. أنت هو،" اسم المستخدم نهاية

الاستمرار في طلب الآراء حتى لا يتبقى المزيد...

المخرجات = "سيطلب منك هذا البرنامج إدخال أسماء شخصية" المخرجات = "حتى تضغط على زر الإدخال دون إدخال اسم" NameCount = 0 :( GETINPUT ) AGAIN NameCount = NameCount + 1 المخرجات = "الاسم " NameCount ": " PersonalName GETINPUT المخرجات = "الرجاء إدخال الاسم " NameCount + 1 PersonalName = INPUT PersonalName LEN ( 1 ) : S ( AGAIN ) المخرجات = "انتهى. " NameCount " اسمًا مطلوبًا." END

التطبيقات

كان التطبيق الكلاسيكي على جهاز PDP-10 ؛ وقد استُخدم لدراسة المترجمات ، والقواعد النحوية الرسمية ، والذكاء الاصطناعي ، وخاصة الترجمة الآلية وفهم اللغات الطبيعية آليًا . كان التطبيق الأصلي على جهاز IBM 7090 في مختبرات بيل، هولمديل، نيوجيرسي. صُممت لغة SNOBOL4 خصيصًا لتكون قابلة للنقل؛ بدأ التطبيق الأول على جهاز IBM 7094 في عام 1966، ولكن اكتمل على جهاز IBM 360 في عام 1967. وسرعان ما نُقلت إلى العديد من المنصات الأخرى.

يتم تنفيذه عادةً كمترجم بسبب صعوبة تنفيذ بعض ميزاته عالية المستوى، ولكن هناك مترجم ، وهو مترجم SPITBOL ، الذي يوفر جميع التسهيلات التي يوفرها المترجم تقريبًا.

كان التنفيذ الكلاسيكي للغة SNOBOL4 على جهاز PDP-10 بطيئًا للغاية، وفي عام 1972، صمّم جيمس جيمبل من مختبرات بيل في هولمديل، نيوجيرسي، تطبيقًا أصليًا للغة SNOBOL4 على جهاز PDP-10 أطلق عليه اسم SITBOL. استخدم جيمبل هذا التصميم كأساس لدورة دراسات عليا في معالجة النصوص، كان يُدرّسها في ذلك العام في معهد ستيفنز للتكنولوجيا (ولهذا سُمّيت SITBOL). كُلّف الطلاب بتنفيذ أجزاء من البرنامج (باستخدام مُجمّع PDP-10)، وكرّس الفصل الدراسي بأكمله لتنفيذ SITBOL. اكتمل أكثر من 80% من البرنامج بنهاية الفصل الدراسي، ثم أكمله البروفيسور جيمبل وعدد من الطلاب خلال فصل الصيف. كانت SITBOL مُفسّرًا كامل الميزات وعالي الأداء للغة SNOBOL4.

يأتي مُصرّف GNAT Ada مزودًا بحزمة (GNAT.Spitbol) تُنفّذ جميع دلالات معالجة السلاسل النصية في Spitbol. ويمكن استدعاء هذه الحزمة من داخل برنامج Ada .

كان محرر الملفات الخاص بنظام محطة ميشيغان (MTS) يوفر مطابقة الأنماط بناءً على أنماط SNOBOL4. [ 11 ]

تتوفر حاليًا عدة تطبيقات. يُعدّ Macro SNOBOL4 المكتوب بلغة C، والذي طوّره فيل بودني، تطبيقًا مجانيًا ومفتوح المصدر، قادرًا على العمل على معظم المنصات. [ 12 ] قدّمت شركة Catspaw تطبيقًا تجاريًا للغة SNOBOL4 للعديد من منصات الحوسبة المختلفة، بما في ذلك DOS وMacintosh وSun وRS/6000 وغيرها، وهذه التطبيقات متاحة الآن مجانًا من Catspaw. كما يتوفر أيضًا Minnesota SNOBOL4، من تطوير فيكتورز بيرستيس، وهو أقرب تطبيق للحاسوب الشخصي إلى إصدار IBM الرئيسي الأصلي (حتى أنه يدعم عبارات FORMAT الشبيهة بلغة Fortran)، وهو مجاني أيضًا. [ 13 ]

على الرغم من أن لغة SNOBOL نفسها لا تحتوي على ميزات البرمجة المهيكلة ، فقد صُمم ونُفذ معالج مسبق للغة SNOBOL يُسمى Snostorm خلال سبعينيات القرن الماضي على يد فريد ج. شوارتز لاستخدامه ضمن نظام محطة ميشيغان (MTS) في جامعة ميشيغان . [ 14 ] استُخدم Snostorm في ثمانية إلى خمسة عشر موقعًا كانت تُشغل نظام MTS. كما كان متاحًا في جامعة كوليدج لندن (UCL) بين عامي 1982 و1984.

تُضيف لغة Snocone، التي طورها أندرو كونيغ، بنىً هيكليةً قائمةً على الكتل إلى لغة SNOBOL4. وتُعتبر Snocone لغة برمجة مستقلة بذاتها، وليست مجموعةً فرعيةً من SNOBOL4. [ 15 ]

أضافت لغة SPITBOL عددًا من الميزات التي، رغم عدم استخدامها لكلمات البرمجة الهيكلية التقليدية، تُتيح توفير العديد من الإمكانيات المكافئة التي تُعرف عادةً باسم "البرمجة الهيكلية"، وأبرزها بنى if/then/else المتداخلة. وقد أُضيفت هذه الميزات لاحقًا إلى معظم تطبيقات SNOBOL4 الحديثة. بعد سنوات عديدة من طرحها كمنتج تجاري، أُصدرت SPITBOL في أبريل 2009 كبرنامج مجاني بموجب رخصة جنو العمومية العامة .

تسمية

وفقًا لديف فاربر، [ 16 ] هو وجريسولد وبولونسكي "توصلوا أخيرًا إلى اسم Symbolic EXpression Interpreter SEXI".

سارت الأمور على ما يرام حتى يوم من الأيام كنت أقوم فيه بإرسال مهمة دفعية لتجميع النظام، وكالعادة على بطاقة العمل الخاصة بي - البطاقة الأولى في المجموعة، قمت، وفقًا لمعايير BTL، بثقب وظيفتي واسمي - SEXI Farber.

نظرت إحدى فتيات مركز التدريب إلى الصورة وقالت بطريقة فكاهية: "هذا ما تعتقده".

هذا ما أوضح لنا حاجتنا إلى اسم آخر! جلسنا نتحدث ونشرب القهوة ونلعب بالمطاط، وبعد وقت طويل جدًا، قال أحدهم - على الأرجح رالف - "ليس لدينا أي فرصة لإيجاد اسم". صرخنا جميعًا في وقت واحد: "وجدناها! سنوبول!"، على غرار جميع لغات BOL . ثم بذلنا جهدًا كبيرًا لمعرفة معناها.

من الاختصارات الشائعة لكلمة "SNOBOL" هي "لغة رمزية موجهة نحو السلاسل" [ 17 ] أو (كاختصار شبه كامل ) "لغة رمزية موجهة نحو السلاسل". [ 18 ]

انظر أيضاً

مراجع

  1. إيروساليمسكي، روبرتو؛ دي فيغيريدو، لويز هنريكي؛ سيليس، فالديمار (2007)، "تطور لغة لوا"، وقائع المؤتمر الثالث لجمعية ACM SIGPLAN حول تاريخ لغات البرمجة (ملف PDF) ، ص  26، doi : 10.1145/1238844.1238846 ، ISBN 9781595937667، S2CID 475143 
  2. جيمبل، جيه إف (فبراير 1973). "نظرية الأنماط المنفصلة وتطبيقها في SNOBOL4" . مجلة اتصالات ACM . 16 (2): 91-100 . doi : 10.1145/361952.361960 . S2CID 17059429 . 
  3. "دكتور دوبز: برامج تُحوّل شفرتها المصدرية؛ أو: نكتة سنوبول فوت" . Dobbscodetalk.com . تم الاطلاع عليه بتاريخ 4 ديسمبر 2011 .
  4. بيانات الاتصال. "perlre" . perldoc.perl.org . تم الاطلاع عليه بتاريخ 4 ديسمبر 2011 .
  5. "دليل تعليمي حول التعبيرات النمطية المتكررة" . تم الاطلاع عليه بتاريخ 19-03-2017 .
  6. غريسولد، رالف إي.؛ هانسون، ديفيد ر. (أبريل 1977). "نظرة عامة على SL5" . إشعارات ACM SIGPLAN . 12 (4): 40-50 . doi : 10.1145/954654.954658 . S2CID 38692673 . 
  7. انظر الفصل 1 من كتاب "التنفيذ الكلي لـ SNOBOL4"
  8. تم تنفيذ SNOBOL4 باستخدام لغة C لإعادة إنشاء تعليمات الآلة الافتراضية.
  9. غريسولد، رالف (1978). "تاريخ لغات برمجة سنوبول" (ملف PDF) . إشعارات ACM SIGPLAN . 13 (8): 275-308 . doi : 10.1145/960118.808393 . S2CID 5413577. مؤرشف من الأصل (ملف PDF) بتاريخ 2019-03-02. 
  10. ويكسلبلات، ريتشارد ل. ، محرر. (2014) [1981]. تاريخ لغات البرمجة . دار النشر الأكاديمية. ص 784. ISBN  9781483266169.
  11. مقدمة إلى محرر ملفات MTS ، مركز الحوسبة بجامعة ميشيغان، 1986.
  12. "SNOBOL4.ORG -- موارد SNOBOL4" .
  13. "لغة برمجة مينيسوتا سنوبول 4" .
  14. "SNOSTORM" ، المجلد 9 من MTS: SNOBOL4 في MTS ، مركز الحوسبة، جامعة ميشيغان، يونيو 1979، الصفحات 99-120. تم الاطلاع عليه في 1 سبتمبر 2014.
  15. "لغة برمجة سنوكون" ، أندرو كونيغ، يو إس إي إن آي إكس (بورتلاند، أوريغون)، يونيو 1985. تم الاطلاع عليه في 2 سبتمبر 2014.
  16. جدير بالقراءة: مقالة ويكيبيديا عن سنوبول - القصة الحقيقية (ليست من ويكيبيديا) مؤرشفة في 10 فبراير 2020 على موقع Wayback Machine (ديف فاربر، قائمة بريدية لأشخاص مثيرين للاهتمام، 26 ديسمبر 2008)
  17. الحواسيب والعلوم الإنسانية 1 : 158، 1967.
  18. بيلزر، جاك؛ هولزمان، ألبرت ج.؛ كينت، ألين، محرران. (1979). "SNOBOL" . موسوعة علوم وتكنولوجيا الحاسوب . المجلد 13. مطبعة CRC. ص 173. ISBN   0-8247-2263-9.

للمزيد من القراءة

  • إيمر، مارك ب. (1985). SNOBOL4+: لغة SNOBOL4 لمستخدمي الحاسوب الشخصي . برنتيس هول. ISBN 0-13-815119-9.
  • جيمبل، جيمس ف. (1976). الخوارزميات في SNOBOL4 . وايلي. ISBN 0-471-30213-9.أُعيد نشرها في ساليدا، كولورادو: كاتسباو، 1986 ( ISBN) 0-939793-00-8).
  • غريسولد، رالف إي. (1972). تطبيق الماكرو للغة SNOBOL4 . دبليو إتش فريمان. ISBN 0-7167-0447-1.
  • غريسولد، رالف إي.؛ بواج، جيه إف؛ بولونسكي، آي بي (1968). لغة برمجة سنوبول 4. برنتيس هول. ISBN 0-13-815373-6.
  • غريسولد، رالف إي. (1975). معالجة السلاسل والقوائم في SNOBOL4: التقنيات والتطبيقات . برنتيس هول. ISBN 0-13-853010-6.
  • هوكي، سوزان م. (1985). برمجة سنوبول للعلوم الإنسانية . مطبعة كلارندون. ISBN 0-19-824676-5.