في عالم البرمجة، تُعد تعبيرات S (أو التعبيرات الرمزية) تمثيلًا لبيانات القائمة المتداخلة (بنية الشجرة). تم اقتراح هذا التمثيل ونشره لأول مرة بواسطة لغة برمجة Lisp وتم استخدامه على نطاق واسع في كل من الكود المصدر وبيانات اللغة. تعد تعبيرات S ثورية في البرمجة وتمثيل هياكل البيانات. دعونا نلقي نظرة فاحصة على ميزاتها واستخداماتها الرئيسية.
يعني هذا التعريف المتكرر أن تعبيرات S والقوائم يمكنها تمثيل أي شجرة ثنائية.
بالإضافة إلى ذلك، توفر لهجات Lisp الحديثة مثل Common Lisp وScheme بناء جملة باستخدام علامات البيانات للإشارة إلى البنية المشتركة للأشياء، مما يسمح للتعابير بحمل دورات مرجعية دون التسبب في تكرار لا نهائي.
يحتوي الشكل النحوي لتعبيرات S على اختلافات متعددة لدعم تمثيل أنواع البيانات المختلفة. تشمل أكثرها شيوعًا ما يلي:
<أول>وبالتالي، غالبًا ما يتم استخدام الحرف # لإضافة بادئة إلى امتدادات بناء الجملة، على سبيل المثال، #x10 لعدد صحيح سداسي عشري أو #\C لحرف.
في لغة Lisp، عند التعبير عن الكود المصدر، يكون العنصر الأول من تعبير S عادةً عبارة عن عامل أو اسم وظيفة، ويتم التعامل مع العناصر التالية كمعلمات. يُطلق على هذا اسم "التدوين البادئ" أو "التدوين البولندي". على سبيل المثال، يتم تمثيل تعبير C Boolean 4 == (2 + 2) في تعبير S في Lisp على النحو التالي (= 4 (+ 2 2)).
يختلف التعريف الدقيق للذرة بين أبناء عمومة Lisp؛ حيث يمكن للسلاسل المقتبسة عادةً أن تحتوي على أي أحرف، ولكن لا يمكن للمعرفات غير المقتبسة أن تحتوي على علامات اقتباس، أو أحرف مسافة، أو أقواس، أو أحرف خاصة أخرى. حرف.
يتم قراءة تعبيرات S من خلال وظيفة READ، ويتم استخدام وظيفة PRINT لإخراج تعبيرات S. إن هذه القدرة المتبادلة على القراءة والكتابة تجعل برامج Lisp لا تمثل فقط الكود المصدر، بل أيضًا هياكل بيانات قابلة للمعالجة. يمكن تنسيق برامج Lisp على هيئة تعبيرات S جميلة وإخراجها بتنسيقات مختلفة من خلال وظيفة PPRINT.
تحتوي لغات البرمجة المختلفة المشتقة من Lisp على مواصفات بناء جملة S-expression الخاصة بها، بما في ذلك Common Lisp (ANSI INCITS 226-1994 (R2004))، وScheme (R5RS وR6RS)، وISLISP. على الرغم من أن مسودة الإنترنت التي اقترحها رون ريفيست في عام 1997 فشلت في أن تصبح RFC، فإن مواصفات تخزين البيانات العامة وتبادلها التي حددتها على أساس تعبيرات S في لغة Lisp لا تزال مذكورة وتستخدم في مستندات أخرى.
يعرّف Rivest التنسيق على أنه سلسلة مكونة من ثمانية بتات أو قائمة محدودة من تعبيرات S الأخرى، ويصف تنسيقات نقل هياكل التعبير الثلاثة.
لا شك أن هذه التطورات قد عززت تطبيق تعبيرات S في تبادل البيانات وتحليلها، فضلاً عن عالمية ومرونة البرمجة. ومن خلال هذه التطورات في مجال التقييس، نرى الدور المهم الذي تلعبه تعبيرات S في الجيل القادم من البرمجة.
باختصار، لا تعد حالة تعبيرات S في لغة Lisp مجرد متطلب نحوي، بل إنها أيضًا عرض متكامل لبنية البيانات وكود المصدر. إنها تتحدى وجهة نظرنا المتأصلة في لغات البرمجة. فهل يمكن لتعبيرات S أن تجد تطبيقات ومعاني جديدة في البرمجة المستقبلية؟