एस-एक्सप्रेशन
कंप्यूटर प्रोग्रामिंग में, एस-अभिव्यक्ति (या प्रतीकात्मक अभिव्यक्ति, जिसे सेक्सपीआर या सेक्सपी के रूप में संक्षिप्त किया गया है) नीडित सूची (कंप्यूटिंग) (ट्री डेटा संरचना) डेटा के लिए समान नाम वाले संकेतन में अभिव्यक्ति है। प्रोग्रामिंग भाषा लिस्प (प्रोग्रामिंग भाषा) के लिए एस-अभिव्यक्ति का आविष्कार किया गया था और इसे लोकप्रिय बनाया गया था, जो उन्हें स्रोत कोड के साथ-साथ डेटा के लिए भी उपयोग करता है।
लिस्प के सामान्य संश्लेषित सिंटेक्स (प्रोग्रामिंग भाषाएं) में, एस-अभिव्यक्ति को शास्त्रीय रूप से परिभाषित किया गया है[1] जैसा की दर्शया गया है
x
रूप का परमाणु, या(x . y)
रूप की अभिव्यक्ति (कंप्यूटर विज्ञान) जहां x और y एस-अभिव्यक्ति हैं।
यह परिभाषा कोशिकाओं की श्रृंखला के रूप में सूची के लिस्प के प्रतिनिधित्व को दर्शाती है, प्रत्येक क्रमित युग्म है। साधारण सूचियों में, y आगमी कोष्ठिका (यदि कोई हो) की ओर संकेत करता है, इस प्रकार संलग्न सूची बनाता है। परिभाषा के पुनरावर्ती अनुच्छेद का अर्थ है कि यह प्रतिनिधित्व और एस-अभिव्यक्ति संकेतन दोनों ही किसी भी बाइनरी ट्री का प्रतिनिधित्व कर सकते हैं। यद्यपि, प्रतिनिधित्व सैद्धांतिक रूप से परिपत्र संदर्भों की अनुमति दे सकता है, ऐसी स्थितियों में संरचना निश्चित ही ट्री नहीं है, परन्तु चक्रीय ग्राफ है, और शास्त्रीय एस-अभिव्यक्ति संकेतन में इसका प्रतिनिधित्व नहीं किया जा सकता है जब तक कि प्रति संदर्भ के लिए संकेतन प्रदान नहीं किया जाता है (एसक्यूएल विदेशी कुंजी, एसजीएमएल/एक्सएमएल आईडीआरईएफ, आदि के अनुरूप)। सामान्य लिस्प [2] और योजना (प्रोग्रामिंग भाषा)[3] जैसी आधुनिक लिस्प उपभाषा डेटाम लेबल के माध्यम से ऐसा सिंटैक्स प्रदान करती हैं, जिसके साथ वस्तुओं को चिह्नित किया जा सकता है, जिसे बाद में कहीं और दोहराया जा सकता है, जो फिर द्विगुणित संरचना के अतिरिक्त साझा को इंगित करना, जिससे लिस्प पाठक या प्रारूप (सामान्य लिस्प) को पता लगाने में सक्षम बनाना और इस प्रकार असीमित पुनरावृत्ति के बिना चक्रों के मूल्यांकन या निष्पादन को ट्रिगर करना
#n=(x y . #n#)
एक परमाणु की परिभाषा संदर्भ के अनुसार परिवर्तित होती रहती है; जॉन मैक्कार्थी (कंप्यूटर वैज्ञानिक) द्वारा मूल परिभाषा में,[1] यह माना गया था कि अलग-अलग प्रतीकों (प्रोग्रामिंग) का अनंत समुच्चय स्थित था, जिसे लैटिन लिपियों और एकल एम्बेडेड रिक्त स्थान ( वर्ण स्ट्रिंग (कंप्यूटिंग) और संख्यात्मक शाब्दिक (कंप्यूटर प्रोग्रामिंग) का एक उपसमुच्चय ) वाले अंकों की श्रृंखला के रूप में दर्शाया गया था।
अधिकांश आधुनिक सेक्सप्र संकेतन अधिक सामान्य उद्धृत स्ट्रिंग्स (उदाहरण के लिए विराम चिह्न या पूर्ण यूनिकोड सहित) की अनुमति देते हैं, और 2 से अधिक सदस्यों के साथ सूचियों का प्रतिनिधित्व करने के लिए संक्षिप्त संकेतन का उपयोग करते हैं, ताकि
(x y z)
के लिए खड़ा है
(x . (y . (z . NIL)))
NIL
विशेष एंड-ऑफ़-लिस्ट वस्तु (कंप्यूटर विज्ञान) है (वैकल्पिक रूप से लिखा गया है ()
, जो योजना (प्रोग्रामिंग भाषा) में एकमात्र प्रतिनिधित्व है[4]).
प्रोग्रामिंग भाषाओं के लिस्प परिवार में, स्रोत कोड और डेटा दोनों का प्रतिनिधित्व करने के लिए एस-अभिव्यक्ति का उपयोग किया जाता है। एस-अभिव्यक्ति के अन्य उपयोग लिस्प-व्युत्पन्न भाषाओं में हैं जैसे दस्तावेज़ शैली शब्दार्थ और विशिष्टता भाषा, और मार्कअप भाषा के रूप में। इंटरनेट संदेश एक्सेस प्रोटोकॉल और जॉन मैककार्थी (कंप्यूटर वैज्ञानिक) की सामान्य व्यापार संचार भाषा जैसे संचार प्रोटोकॉल में मार्क-अप . इसका उपयोग WebAssembly के पाठ प्रतिनिधित्व के रूप में भी किया जाता है। सिंटैक्स और समर्थित डेटा प्रकारों का विवरण अलग-अलग भाषाओं में भिन्न होता है, परन्तु इन भाषाओं में सबसे आम विशेषता एस-अभिव्यक्ति और प्रीफ़िक्स संकेतन का उपयोग है।
डेटाटाइप्स और सिंटैक्स
एस-अभिव्यक्ति प्रारूप के कई प्रकार हैं, जो विभिन्न डेटाटाइप्स के लिए विभिन्न सिंटैक्स का समर्थन करते हैं। सबसे व्यापक रूप से समर्थित हैं:
- सूचियाँ और जोड़े:
(1 () (2 . 3) (4))
- प्रतीक:
with-hyphen
?@!$
|a symbol with spaces|
- स्ट्रिंग्स:
"Hello, world!"
- पूर्णांक:
-9876543210
- दशमलव संख्याएं:
-0.0
6.28318
6.022e23
चरित्र #
सिंटैक्स में एक्सटेंशन को उपसर्ग करने के लिए अक्सर उपयोग किया जाता है, उदा। #x10
हेक्साडेसिमल पूर्णांकों के लिए, या #\C
पात्रों के लिए।
== लिस्प == में प्रयोग करें
लिस्प में स्रोत कोड का प्रतिनिधित्व करते समय, एस-अभिव्यक्ति का पहला तत्व आमतौर पर ऑपरेटर या फ़ंक्शन का नाम होता है और किसी भी शेष तत्वों को तर्कों के रूप में माना जाता है। इसे उपसर्ग संकेतन या पोलिश संकेतन कहा जाता है। उदाहरण के तौर पर, बूलियन तर्क अभिव्यक्ति लिखा गया है 4 == (2 + 2)
C (प्रोग्रामिंग लैंग्वेज) में, के रूप में दर्शाया गया है (= 4 (+ 2 2))
लिस्प के s-expr-आधारित उपसर्ग अंकन में।
जैसा ऊपर बताया गया है, परमाणु की सटीक परिभाषा एलआईएसपी जैसी भाषाओं में भिन्न होती है। उद्धृत स्ट्रिंग में आमतौर पर उद्धरण के अलावा कुछ भी हो सकता है, जबकि एक गैर-उद्धृत पहचानकर्ता परमाणु में आमतौर पर उद्धरण, खाली स्थान के वर्ण, कोष्ठक, कोष्ठक, कोष्ठक, बैकस्लैश और अर्धविराम के अलावा कुछ भी हो सकता है। किसी भी मामले में, निषिद्ध चरित्र को आमतौर पर पूर्ववर्ती बैकस्लैश से बचकर शामिल किया जा सकता है। यूनिकोड समर्थन भिन्न होता है।
एस-एक्सप्र परिभाषा का पुनरावर्ती मामला परंपरागत रूप से विपक्ष कोशिकाओं का उपयोग करके कार्यान्वित किया जाता है।
एस-अभिव्यक्ति मूल रूप से केवल एम-अभिव्यक्ति द्वारा हेरफेर किए जाने वाले डेटा के लिए अभिप्रेत थे, परन्तु लिस्प का पहला कार्यान्वयन एम-अभिव्यक्ति के एस-अभिव्यक्ति एन्कोडिंग का दुभाषिया था, और लिस्प प्रोग्रामर जल्द ही दोनों कोड के लिए एस-अभिव्यक्ति का उपयोग करने के आदी हो गए। और डेटा। इसका मतलब है कि लिस्प समजातीय है; अर्थात्, कार्यक्रमों का प्राथमिक प्रतिनिधित्व भी आदिम प्रकार की भाषा में डेटा संरचना है।
डेटा एस-अभिव्यक्ति के उदाहरण
नीडित सूचियों को एस-अभिव्यक्ति के रूप में लिखा जा सकता है: ((milk juice) (honey marmalade))
दो-तत्व S-अभिव्यक्ति है जिसके तत्व भी दो-तत्व S-अभिव्यक्ति हैं। लिस्प (और यह आलेख) में प्रयुक्त व्हाइटस्पेस-पृथक संकेतन सामान्य है। पंक्ति विराम (न्यूलाइन वर्ण) आमतौर पर विभाजक के रूप में योग्य होते हैं।
यह एस-अभिव्यक्ति (गज़दार/मेलिश, लिस्प में प्राकृतिक भाषा प्रसंस्करण) के रूप में लिखे गए अंग्रेजी के छोटे से उपसमुच्चय के लिए सरल संदर्भ-मुक्त व्याकरण है, जहां एस = वाक्य, एनपी = संज्ञा वाक्यांश, वीपी = क्रिया वाक्यांश, वी = क्रिया :
(((S) (NP VP))
((VP) (V))
((VP) (V NP))
((V) died)
((V) employed)
((NP) nurses)
((NP) patients)
((NP) Medicenter)
((NP) "Dr Chan"))
=== सोर्स कोड एस-अभिव्यक्ति === का उदाहरण प्रोग्राम कोड एस-अभिव्यक्ति में लिखा जा सकता है, आमतौर पर प्रीफिक्स संकेतन का उपयोग करते हुए।
सामान्य लिस्प में उदाहरण:
(defun factorial (x)
(if (zerop x)
1
(* x (factorial (- x 1)))))
फ़ंक्शन रीड का उपयोग करके एस-अभिव्यक्ति को लिस्प में पढ़ा जा सकता है। रीड एस-अभिव्यक्ति के टेक्स्टुअल प्रतिनिधित्व को पढ़ता है और लिस्प डेटा लौटाता है। फ़ंक्शन PRINT का उपयोग S-अभिव्यक्ति को आउटपुट करने के लिए किया जा सकता है। आउटपुट तब फ़ंक्शन रीड के साथ पढ़ा जा सकता है, जब सभी मुद्रित डेटा ऑब्जेक्ट्स में पठनीय प्रतिनिधित्व होता है। लिस्प में संख्याओं, स्ट्रिंग्स, प्रतीकों, सूचियों और कई अन्य डेटा प्रकारों के लिए पठनीय निरूपण हैं। PPRINT फ़ंक्शन का उपयोग करके प्रोग्राम कोड को सुंदर मुद्रित एस-अभिव्यक्ति के रूप में स्वरूपित किया जा सकता है (नोट: दो Ps के साथ, सुंदर-प्रिंट के लिए छोटा)।
लिस्प प्रोग्राम वैध एस-अभिव्यक्ति हैं, परन्तु सभी एस-अभिव्यक्ति मान्य लिस्प प्रोग्राम नहीं हैं। (1.0 + 3.1)
वैध एस-अभिव्यक्ति है, परन्तु वैध लिस्प प्रोग्राम नहीं है, क्योंकि लिस्प उपसर्ग संकेतन का उपयोग करता है और फ्लोटिंग पॉइंट नंबर (यहां 1.0) ऑपरेशन (अभिव्यक्ति का पहला तत्व) के रूप में मान्य नहीं है।
एक एकल उद्धरण चिह्न से पहले एस-अभिव्यक्ति, जैसा कि 'x
, लिस्प (प्रोग्रामिंग भाषा) के लिए वाक्यात्मक चीनी है # स्व-मूल्यांकन रूपों और उद्धरण | उद्धृत एस-अभिव्यक्ति, इस मामले में (quote x)
.
पार्सिंग
एस-अभिव्यक्ति की तुलना अक्सर एक्सएमएल से की जाती है: मुख्य अंतर यह है कि एस-अभिव्यक्ति में केवल प्रकार का कंटेनमेंट होता है, बिंदीदार युग्म, जबकि एक्सएमएल टैग में सरल गुण, अन्य टैग या सीडीएटीए हो सकते हैं, प्रत्येक अलग-अलग सिंटैक्स का उपयोग करता है। सरल उपयोग के मामलों के लिए, एस-अभिव्यक्ति एक्सएमएल की तुलना में सरल हैं, परन्तु अधिक उन्नत उपयोग के मामलों के लिए, एक्सएमएल में क्वेरी भाषा है जिसे XPath कहा जाता है, एक्सएमएल डेटा के प्रबंधन को आसान बनाने के लिए कई टूल और थर्ड पार्टी लाइब्रेरी।
मानकीकरण
कुछ लिस्प-व्युत्पन्न प्रोग्रामिंग भाषाओं के मानकों में उनके एस-अभिव्यक्ति सिंटैक्स के लिए विनिर्देश शामिल है। इनमें सामान्य लिस्प (ANSI मानक दस्तावेज़ ANSI INCITS 226-1994 (R2004)), स्कीम (प्रोग्रामिंग भाषा) (R5RS और R6RS) शामिल हैं।[5]), और आईएसएलआईएसपी।
रिवेस्ट का संस्करण
मई 1997 में, रॉन रिवेस्ट ने इंटरनेट ड्राफ्ट प्रस्तुत किया[6] टिप्पणियों के अनुरोध के रूप में प्रकाशन के लिए विचार किया जाएगा। मसौदे ने लिस्प एस-अभिव्यक्ति पर आधारित सिंटैक्स को परिभाषित किया परन्तु विशेष रूप से प्रोग्रामिंग के अतिरिक्त सामान्य-उद्देश्य डेटा भंडारण और विनिमय (एक्सएमएल के समान) के लिए अभिप्रेत है। इसे कभी भी RFC के रूप में स्वीकृत नहीं किया गया था, परन्तु तब से इसे अन्य RFC (जैसे RFC 2693) और कई अन्य प्रकाशनों द्वारा उद्धृत और उपयोग किया जाता है।[7] यह मूल रूप से सरल सार्वजनिक कुंजी अवसंरचना में उपयोग के लिए अभिप्रेत था।
रिवेस्ट का प्रारूप एस-अभिव्यक्ति को ऑक्टेट-स्ट्रिंग (बाइट्स की श्रृंखला) या अन्य एस-अभिव्यक्ति की सीमित सूची के रूप में परिभाषित करता है। यह इस संरचना को व्यक्त करने के लिए तीन इंटरचेंज स्वरूपों का वर्णन करता है। उन्नत परिवहन है, जो स्वरूपण के मामले में बहुत लचीला है, और वाक्यात्मक रूप से लिस्प-शैली के अभिव्यक्तियों के समान है, परन्तु वे समान नहीं हैं। उन्नत परिवहन, उदाहरण के लिए, ऑक्टेट-स्ट्रिंग्स को शब्दशः प्रदर्शित करने की अनुमति देता है (स्ट्रिंग की लंबाई कोलन और पूरे कच्चे स्ट्रिंग के बाद), उद्धृत फॉर्म जो एस्केप कैरेक्टर, हेक्साडेसिमल, बेस 64 की अनुमति देता है, या सीधे टोकन के रूप में रखा जाता है यदि यह मिलता है कुछ शर्तें। (रिवेस्ट के टोकन लिस्प टोकन से भिन्न होते हैं जिसमें पूर्व सिर्फ सुविधा और सौंदर्यशास्त्र के लिए होते हैं, और अन्य स्ट्रिंग्स की तरह ही व्यवहार किए जाते हैं, जबकि बाद वाले का विशिष्ट वाक्यात्मक अर्थ होता है।)
रिवेस्ट का मसौदा डिजिटल हस्ताक्षर उद्देश्यों के लिए कैनोनिकल एस-अभिव्यक्ति को परिभाषित करता है। इसका उद्देश्य कॉम्पैक्ट होना है, पार्स करना आसान है, और किसी सार एस-अभिव्यक्ति के लिए अद्वितीय है। यह केवल वर्बैटिम स्ट्रिंग्स की अनुमति देता है, और बाहरी स्ट्रिंग्स को स्वरूपित करने के रूप में व्हाइटस्पेस को प्रतिबंधित करता है। अंत में मूल परिवहन प्रतिनिधित्व है, जो या तो विहित रूप है या बेस64 के समान एन्कोडेड है और ब्रैकेट से घिरा हुआ है, बाद वाला सिस्टम में कैनोनिक रूप से एन्कोडेड एस-अभिव्यक्ति को सुरक्षित रूप से परिवहन करने का इरादा रखता है जो रिक्ति को परिवर्तित कर सकता है (उदाहरण के लिए ईमेल सिस्टम जो 80-वर्ण-चौड़ी रेखाएँ हैं और इससे अधिक कुछ भी लपेटता है)।
यह प्रारूप SPKI के बाहर उपयोग के लिए व्यापक रूप से अनुकूलित नहीं किया गया है (कुछ उपयोगकर्ता GnuPG, libgcrypt, Nettle (क्रिप्टोग्राफ़िक लाइब्रेरी) और GNU lsh हैं)। रिवेस्ट का एस-अभिव्यक्ति वेब पेज पार्सर और जनरेटर (मेरा लाइसेंस के तहत उपलब्ध) के लिए सी (प्रोग्रामिंग भाषा) स्रोत कोड प्रदान करता है, जिसे अन्य कार्यक्रमों में अनुकूलित और एम्बेड किया जा सकता है।[8] इसके अलावा, प्रारूप को स्वतंत्र रूप से लागू करने पर कोई प्रतिबंध नहीं है।
यह भी देखें
- दोष
- कार और सीडीआर
- Fexpr
- लैम्ब्डा कैलकुलस
- एम-अभिव्यक्ति
- कैनोनिकल एस-अभिव्यक्ति
- डेटा क्रमांकन स्वरूपों की तुलना
संदर्भ
- ↑ 1.0 1.1 John McCarthy (1960/2006). Recursive functions of symbolic expressions Archived 2004-02-02 at the Wayback Machine. Originally published in Communications of the ACM.
- ↑ "Common Lisp HyperSpec: 22.4 - The Printer Dictionary: *PRINT-CIRCLE*". 2018-12-28.
- ↑ "Revised7 Report on the Algorithmic Language Scheme: Section 2.4: Datum Labels" (PDF). 2013-07-06.
- ↑ "Revised^5 Report on the Algorithmic Language Scheme". schemers.org.
- ↑ Sperber, Michael; Dybvig, R. Kent; Flatt, Matthew; Van Straaten, Anton; Findler, Robby; Matthews, Jacob (Aug 12, 2009). "Revised6 Report on the Algorithmic Language Scheme". Journal of Functional Programming. 19 (S1): 1–301. CiteSeerX 10.1.1.372.373. doi:10.1017/S0956796809990074.
- ↑ S-expressions, Network Working Group, Internet Draft, Expires November 4, 1997 - R. Rivest, May 4, 1997 draft-rivest-sexp-00.txt, Ronald L. Rivest, CSAIL MIT website
- ↑ rivest sexp, Google Scholar (search)
- ↑ "SEXP (एस-एक्सप्रेशन)". people.csail.mit.edu.
बाहरी संबंध
- sfsexp the small, fast S-expression library for C/C++ on GitHub
- miniलिस्प, by Léon Bottou.
- S-expressions on Rosettacode has implementations of readers and writers in many languages.