एस-एक्सप्रेशन: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 1: Line 1:
{{Short description|Data serialization format}}
{{Short description|Data serialization format}}
[[File:Corrected_S-expression_tree_2.svg|thumb|ट्री ([[डेटा संरचना]]) एस-अभिव्यक्ति का प्रतिनिधित्व करने वाली डेटा संरचना <code>(* 2 (+ 3 4))</code> ]][[कंप्यूटर प्रोग्रामिंग]] में, '''एस-अभिव्यक्ति''' (या '''प्रतीकात्मक अभिव्यक्ति''', जिसे '''सेक्सपीआर''' या '''सेक्सपी''' के रूप में संक्षिप्त किया गया है) नीडित [[ सूची (कंप्यूटिंग) |सूची (कंप्यूटिंग)]] (ट्री डेटा संरचना) डेटा के लिए समान नाम वाले संकेतन में अभिव्यक्ति है। प्रोग्रामिंग भाषा [[लिस्प (प्रोग्रामिंग भाषा)]] के लिए एस-अभिव्यक्ति का आविष्कार किया गया था और इसे लोकप्रिय बनाया गया था, जो उन्हें स्रोत कोड के साथ-साथ डेटा के लिए भी उपयोग करता है।
[[File:Corrected_S-expression_tree_2.svg|thumb|ट्री ([[डेटा संरचना]]) एस-अभिव्यक्ति का प्रतिनिधित्व करने वाली डेटा संरचना <code>(* 2 (+ 3 4))</code> ]][[कंप्यूटर प्रोग्रामिंग]] में, '''एस-अभिव्यक्ति''' (या '''प्रतीकात्मक अभिव्यक्ति''', जिसे '''सेक्सपीआर''' या '''सेक्सपी''' के रूप में संक्षिप्त किया गया है) नीडित [[ सूची (कंप्यूटिंग) |सूची (कंप्यूटिंग)]] (ट्री डेटा संरचना) डेटा के लिए समान नाम वाले अंकन में अभिव्यक्ति है। प्रोग्रामिंग भाषा [[लिस्प (प्रोग्रामिंग भाषा)]] के लिए एस-अभिव्यक्ति का आविष्कार किया गया था और इसे लोकप्रिय बनाया गया था, जो उन्हें स्रोत कोड के साथ-साथ डेटा के लिए भी उपयोग करता है।


लिस्प के सामान्य संश्लेषित [[ सिंटेक्स (प्रोग्रामिंग भाषाएं) |सिंटेक्स (प्रोग्रामिंग भाषाएं)]] में, एस-अभिव्यक्ति को शास्त्रीय रूप से परिभाषित किया गया है<ref name="McCarthy1960">John McCarthy (1960/2006). [http://www-formal.stanford.edu/jmc/recursive/recursive.html Recursive functions of symbolic expressions] {{webarchive|url=https://web.archive.org/web/20040202215021/http://www-formal.stanford.edu/jmc/recursive/recursive.html |date=2004-02-02 }}. Originally published in [[Communications of the ACM]].</ref> जैसा की दर्शया गया है
लिस्प के सामान्य संश्लेषित [[ सिंटेक्स (प्रोग्रामिंग भाषाएं) |सिंटेक्स (प्रोग्रामिंग भाषाएं)]] में, एस-अभिव्यक्ति को शास्त्रीय रूप से परिभाषित किया गया है<ref name="McCarthy1960">John McCarthy (1960/2006). [http://www-formal.stanford.edu/jmc/recursive/recursive.html Recursive functions of symbolic expressions] {{webarchive|url=https://web.archive.org/web/20040202215021/http://www-formal.stanford.edu/jmc/recursive/recursive.html |date=2004-02-02 }}. Originally published in [[Communications of the ACM]].</ref> जैसा की दर्शया गया है
Line 7: Line 7:
# <code>(''x'' . ''y'')</code> रूप की [[अभिव्यक्ति (कंप्यूटर विज्ञान)]] जहां x और y एस-अभिव्यक्ति हैं।
# <code>(''x'' . ''y'')</code> रूप की [[अभिव्यक्ति (कंप्यूटर विज्ञान)]] जहां x और y एस-अभिव्यक्ति हैं।


यह परिभाषा कोशिकाओं की श्रृंखला के रूप में सूची के लिस्प के प्रतिनिधित्व को दर्शाती है, प्रत्येक क्रमित युग्म है। साधारण सूचियों में, y आगमी कोष्ठिका (यदि कोई हो) की ओर संकेत करता है, इस प्रकार [[लिंक्ड सूची|संलग्न सूची]] बनाता है। परिभाषा के [[ प्रत्यावर्तन |पुनरावर्ती]] अनुच्छेद का अर्थ है कि यह प्रतिनिधित्व और एस-अभिव्यक्ति संकेतन दोनों ही किसी भी [[बाइनरी ट्री]] का प्रतिनिधित्व कर सकते हैं। यद्यपि, प्रतिनिधित्व सैद्धांतिक रूप से परिपत्र संदर्भों की अनुमति दे सकता है, ऐसी स्थितियों में संरचना निश्चित ही ट्री नहीं है, परन्तु [[चक्रीय ग्राफ]] है, और शास्त्रीय एस-अभिव्यक्ति संकेतन में इसका प्रतिनिधित्व नहीं किया जा सकता है जब तक कि प्रति संदर्भ के लिए संकेतन प्रदान नहीं किया जाता है ([[एसक्यूएल]] [[विदेशी कुंजी]], [[एसजीएमएल]]/[[एक्सएमएल]] आईडीआरईएफ, आदि के अनुरूप)। [[ सामान्य लिस्प |सामान्य लिस्प]] <ref>{{cite web|title=Common Lisp HyperSpec: 22.4 - The Printer Dictionary: *PRINT-CIRCLE*|url=http://clhs.lisp.se/Body/v_pr_cir.htm|date=2018-12-28}}</ref> और [[योजना (प्रोग्रामिंग भाषा)]]<ref>{{cite web|title=Revised<sup>7</sup> Report on the Algorithmic Language‌ Scheme: Section 2.4: Datum Labels|url=https://small.r7rs.org/attachment/r7rs.pdf#section.2.4|date=2013-07-06}}</ref> जैसी आधुनिक लिस्प उपभाषा डेटाम लेबल के माध्यम से ऐसा सिंटैक्स प्रदान करती हैं, जिसके साथ वस्तुओं को चिह्नित किया जा सकता है, जिसे बाद में कहीं और दोहराया जा सकता है, जो फिर द्विगुणित संरचना के अतिरिक्त साझा को इंगित करना, जिससे [[ लिस्प पाठक |लिस्प पाठक]] या प्रारूप (सामान्य लिस्प) को पता लगाने में सक्षम बनाना और इस प्रकार असीमित पुनरावृत्ति के बिना चक्रों के मूल्यांकन या निष्पादन को ट्रिगर करना
यह परिभाषा कोशिकाओं की श्रृंखला के रूप में सूची के लिस्प के प्रतिनिधित्व को दर्शाती है, प्रत्येक क्रमित युग्म है। साधारण सूचियों में, y आगमी कोष्ठिका (यदि कोई हो) की ओर संकेत करता है, इस प्रकार [[लिंक्ड सूची|संलग्न सूची]] बनाता है। परिभाषा के [[ प्रत्यावर्तन |पुनरावर्ती]] अनुच्छेद का अर्थ है कि यह प्रतिनिधित्व और एस-अभिव्यक्ति अंकन दोनों ही किसी भी [[बाइनरी ट्री]] का प्रतिनिधित्व कर सकते हैं। यद्यपि, प्रतिनिधित्व सैद्धांतिक रूप से परिपत्र संदर्भों की अनुमति दे सकता है, ऐसी स्थितियों में संरचना निश्चित ही ट्री नहीं है, परन्तु [[चक्रीय ग्राफ]] है, और शास्त्रीय एस-अभिव्यक्ति अंकन में इसका प्रतिनिधित्व नहीं किया जा सकता है जब तक कि प्रति संदर्भ के लिए अंकन प्रदान नहीं किया जाता है ([[एसक्यूएल]] [[विदेशी कुंजी]], [[एसजीएमएल]]/[[एक्सएमएल]] आईडीआरईएफ, आदि के अनुरूप)। [[ सामान्य लिस्प |सामान्य लिस्प]] <ref>{{cite web|title=Common Lisp HyperSpec: 22.4 - The Printer Dictionary: *PRINT-CIRCLE*|url=http://clhs.lisp.se/Body/v_pr_cir.htm|date=2018-12-28}}</ref> और [[योजना (प्रोग्रामिंग भाषा)]]<ref>{{cite web|title=Revised<sup>7</sup> Report on the Algorithmic Language‌ Scheme: Section 2.4: Datum Labels|url=https://small.r7rs.org/attachment/r7rs.pdf#section.2.4|date=2013-07-06}}</ref> जैसी आधुनिक लिस्प उपभाषा डेटाम लेबल के माध्यम से ऐसा सिंटैक्स प्रदान करती हैं, जिसके साथ ऑब्जेक्टओं को चिह्नित किया जा सकता है, जिसे बाद में कहीं और दोहराया जा सकता है, जो फिर द्विगुणित संरचना के अतिरिक्त साझा को इंगित करना, जिससे [[ लिस्प पाठक |लिस्प पाठक]] या प्रारूप (सामान्य लिस्प) को पता लगाने में सक्षम बनाना और इस प्रकार असीमित पुनरावृत्ति के बिना चक्रों के मूल्यांकन या निष्पादन को ट्रिगर करना


: <code>#n=(''x'' ''y'' . #n#)</code>
: <code>#n=(''x'' ''y'' . #n#)</code>
एक परमाणु की परिभाषा संदर्भ के अनुसार परिवर्तित होती रहती है; जॉन मैक्कार्थी (कंप्यूटर वैज्ञानिक) द्वारा मूल परिभाषा में,<ref name="McCarthy1960"/> यह माना गया था कि अलग-अलग [[प्रतीक (प्रोग्रामिंग)|प्रतीकों (प्रोग्रामिंग)]] का अनंत समुच्चय स्थित था, जिसे [[लैटिन लिपि|लैटिन लिपियों]] और एकल एम्बेडेड रिक्त स्थान ( वर्ण [[स्ट्रिंग (कंप्यूटिंग)]] और संख्यात्मक [[ शाब्दिक (कंप्यूटर प्रोग्रामिंग) |शाब्दिक (कंप्यूटर प्रोग्रामिंग)]] का एक उपसमुच्चय ) वाले अंकों की श्रृंखला के रूप में दर्शाया गया था।
एक परमाणु की परिभाषा संदर्भ के अनुसार परिवर्तित होती रहती है; जॉन मैक्कार्थी (कंप्यूटर वैज्ञानिक) द्वारा मूल परिभाषा में,<ref name="McCarthy1960"/> यह माना गया था कि अलग-अलग [[प्रतीक (प्रोग्रामिंग)|प्रतीकों (प्रोग्रामिंग)]] का अनंत समुच्चय स्थित था, जिसे [[लैटिन लिपि|लैटिन लिपियों]] और एकल एम्बेडेड रिक्त स्थान ( कैरैक्टर [[स्ट्रिंग (कंप्यूटिंग)]] और संख्यात्मक [[ शाब्दिक (कंप्यूटर प्रोग्रामिंग) |शाब्दिक (कंप्यूटर प्रोग्रामिंग)]] का एक उपसमुच्चय ) वाले अंकों की श्रृंखला के रूप में दर्शाया गया था।


अधिकांश आधुनिक सेक्सप्र संकेतन अधिक सामान्य उद्धृत स्ट्रिंग्स (उदाहरण के लिए विराम चिह्न या पूर्ण [[यूनिकोड]] सहित) की अनुमति देते हैं, और 2 से अधिक सदस्यों के साथ सूचियों का प्रतिनिधित्व करने के लिए संक्षिप्त संकेतन का उपयोग करते हैं, ताकि
अधिकांश आधुनिक सेक्सपीआर अंकन अधिक सामान्य उद्धृत स्ट्रिंग्स (उदाहरण के लिए विराम चिह्न या पूर्ण [[यूनिकोड]] सहित) की अनुमति देते हैं, और 2 से अधिक सदस्यों के साथ सूचियों का प्रतिनिधित्व करने के लिए संक्षिप्त अंकन का उपयोग करते हैं, ताकि


: <code>(''x'' ''y'' ''z'')</code>
: <code>(''x'' ''y'' ''z'')</code>
के लिए खड़ा है
इसका अर्थ है कि


: <code>(''x'' . (''y'' . (''z'' . NIL)))</code>
: <code>(''x'' . (''y'' . (''z'' . NIL)))</code>


<code>NIL</code> विशेष एंड-ऑफ़-लिस्ट [[ वस्तु (कंप्यूटर विज्ञान) |वस्तु (कंप्यूटर विज्ञान)]] है (वैकल्पिक रूप से लिखा गया है <code>()</code>, जो योजना (प्रोग्रामिंग भाषा) में एकमात्र प्रतिनिधित्व है<ref>{{Cite web|url=https://schemers.org/Documents/Standards/R5RS/HTML/r5rs-Z-H-9.html|title=Revised^5 Report on the Algorithmic Language Scheme|website=schemers.org}}</ref>).
<code>NIL</code> विशेष अंत-सूची [[ वस्तु (कंप्यूटर विज्ञान) |ऑब्जेक्ट (कंप्यूटर विज्ञान)]] है (वैकल्पिक रूप लिखित <code>()</code>, जो योजना (प्रोग्रामिंग भाषा) में एकमात्र प्रतिनिधित्व है<ref>{{Cite web|url=https://schemers.org/Documents/Standards/R5RS/HTML/r5rs-Z-H-9.html|title=Revised^5 Report on the Algorithmic Language Scheme|website=schemers.org}}</ref>)


प्रोग्रामिंग भाषाओं के लिस्प परिवार में, स्रोत कोड और डेटा दोनों का प्रतिनिधित्व करने के लिए एस-अभिव्यक्ति का उपयोग किया जाता है। एस-अभिव्यक्ति के अन्य उपयोग लिस्प-व्युत्पन्न भाषाओं में हैं जैसे [[दस्तावेज़ शैली शब्दार्थ और विशिष्टता भाषा]], और मार्कअप भाषा के रूप में। [[इंटरनेट संदेश एक्सेस प्रोटोकॉल]] और जॉन मैककार्थी (कंप्यूटर वैज्ञानिक) की [[ सामान्य व्यापार संचार भाषा |सामान्य व्यापार संचार भाषा]] जैसे [[संचार प्रोटोकॉल]] में मार्क-अप . इसका उपयोग [[WebAssembly]] के पाठ प्रतिनिधित्व के रूप में भी किया जाता है। सिंटैक्स और समर्थित [[डेटा प्रकार]]ों का विवरण अलग-अलग भाषाओं में भिन्न होता है, परन्तु इन भाषाओं में सबसे आम विशेषता एस-अभिव्यक्ति और प्रीफ़िक्स संकेतन का उपयोग है।
प्रोग्रामिंग भाषाओं के लिस्प वर्ग में, स्रोत कोड और डेटा दोनों का प्रतिनिधित्व करने के लिए एस-अभिव्यक्ति का उपयोग किया जाता है। एस-अभिव्यक्ति के अन्य उपयोग [[दस्तावेज़ शैली शब्दार्थ और विशिष्टता भाषा|डॉक्यूमेंट शैली शब्दार्थ और विशिष्टता भाषा]] जैसी लिस्प-व्युत्पन्न भाषाओं में हैं, और [[इंटरनेट संदेश एक्सेस प्रोटोकॉल]] और जॉन मैककार्थी (कंप्यूटर वैज्ञानिक) के [[ सामान्य व्यापार संचार भाषा |सामान्य व्यापार संचार भाषा]] जैसे [[संचार प्रोटोकॉल]] में मार्क-अप के रूप में हैं। इसका उपयोग [[WebAssembly|वेब असेंबली]] के पाठ प्रतिनिधित्व के रूप में भी किया जाता है। सिंटैक्स और समर्थित [[डेटा प्रकार|डेटा प्रकारों]] का विवरण अलग-अलग भाषाओं में भिन्न होता है, परन्तु इन भाषाओं में सबसे सामान्य विशेषता एस-अभिव्यक्ति और प्रीफ़िक्स अंकन का उपयोग है।


== डेटाटाइप्स और सिंटैक्स ==
== डेटाटाइप और सिंटैक्स ==
एस-अभिव्यक्ति प्रारूप के कई प्रकार हैं, जो विभिन्न डेटाटाइप्स के लिए विभिन्न सिंटैक्स का समर्थन करते हैं। सबसे व्यापक रूप से समर्थित हैं:
एस-अभिव्यक्ति प्रारूप के कई प्रकार हैं, जो विभिन्न डेटाटाइप के लिए विभिन्न सिंटैक्स का समर्थन करते हैं। इस प्रकार से सबसे व्यापक रूप से समर्थित हैं:
* सूचियाँ और जोड़े: <code>(1 () (2 . 3) (4))</code>
* सूचियाँ और जोड़े: <code>(1 () (2 . 3) (4))</code>
* प्रतीक: <code>with-hyphen</code> <code>?@!$</code> <code>|a symbol with spaces|</code>
* प्रतीक: <code>with-hyphen</code> <code>?@!$</code> <code>|a symbol with spaces|</code>
Line 30: Line 30:
* पूर्णांक: <code>-9876543210</code>
* पूर्णांक: <code>-9876543210</code>
* दशमलव संख्याएं: <code>-0.0</code> <code>6.28318</code> <code>6.022e23</code>
* दशमलव संख्याएं: <code>-0.0</code> <code>6.28318</code> <code>6.022e23</code>
चरित्र <code>#</code> सिंटैक्स में एक्सटेंशन को उपसर्ग करने के लिए अक्सर उपयोग किया जाता है, उदा। <code>#x10</code> हेक्साडेसिमल पूर्णांकों के लिए, या <code>#\C</code> पात्रों के लिए।
कैरैक्टर <code>#</code> का उपयोग अक्सर सिंटैक्स में एक्सटेंशन उपसर्ग करने के लिए किया जाता है, उदाहरण के लिए हेक्साडेसिमल पूर्णांकों के लिए <code>#x10</code> हेक्साडेसिमल या कैरैक्टरों के लिए <code>#\C</code> है।


== लिस्प == में प्रयोग करें
== लिस्प में प्रयोग ==
लिस्प में स्रोत कोड का प्रतिनिधित्व करते समय, एस-अभिव्यक्ति का पहला तत्व आमतौर पर ऑपरेटर या फ़ंक्शन का नाम होता है और किसी भी शेष तत्वों को तर्कों के रूप में माना जाता है। इसे उपसर्ग संकेतन या [[पोलिश संकेतन]] कहा जाता है। उदाहरण के तौर पर, [[बूलियन तर्क]] अभिव्यक्ति लिखा गया है {{nowrap begin}}<code>4 == (2 + 2)</code>{{nowrap end}} C (प्रोग्रामिंग लैंग्वेज) में, के रूप में दर्शाया गया है {{nowrap begin}}<code>(= 4 (+ 2 2))</code>{{nowrap end}} लिस्प के s-expr-आधारित उपसर्ग अंकन में।
लिस्प में स्रोत कोड का प्रतिनिधित्व करते समय, एस-अभिव्यक्ति का प्रथम अवयव सामान्यतः ऑपरेटर या फ़ंक्शन का नाम होता है और किसी भी शेष अवयवों को तर्कों के रूप में माना जाता है। इसे उपसर्ग अंकन या [[पोलिश संकेतन|पोलिश अंकन]] कहा जाता है। उदाहरण के रूप में, C (प्रोग्रामिंग लैंग्वेज) में {{nowrap begin}}<code>4 == (2 + 2)</code>{{nowrap end}} लिखी गई [[बूलियन तर्क]] अभिव्यक्ति लिखा गया को लिस्प के एस-एक्सपीआर-आधारित उपसर्ग अंकन में {{nowrap begin}}<code>(= 4 (+ 2 2))</code>{{nowrap end}} के रूप में दर्शाया गया है।


जैसा ऊपर बताया गया है, परमाणु की सटीक परिभाषा एलआईएसपी जैसी भाषाओं में भिन्न होती है। उद्धृत स्ट्रिंग में आमतौर पर उद्धरण के अलावा कुछ भी हो सकता है, जबकि
जैसा ऊपर बताया गया है, परमाणु की यथार्थ परिभाषा एलआईएसपी जैसी भाषाओं में भिन्न होती है। उद्धृत स्ट्रिंग में सामान्यतः उद्धरण के अतिरिक्त कुछ भी हो सकता है, जबकि एक गैर-उद्धृत पहचानकर्ता परमाणु में सामान्यतः उद्धरण, रिक्त स्थान के कैरैक्टर, लघु कोष्ठक, कोष्ठक, धनुर्कोष्ठक, बैकस्लैश और अर्धविराम के अतिरिक्त कुछ भी हो सकता है। किसी भी स्थिति में, निषिद्ध कैरैक्टर को सामान्यतः पूर्ववर्ती बैकस्लैश से बचकर सम्मिलित किया जा सकता है। यूनिकोड समर्थन भिन्न होता है।
एक गैर-उद्धृत पहचानकर्ता परमाणु में आमतौर पर उद्धरण, खाली स्थान के वर्ण, कोष्ठक, कोष्ठक, कोष्ठक, बैकस्लैश और अर्धविराम के अलावा कुछ भी हो सकता है। किसी भी मामले में, निषिद्ध चरित्र को आमतौर पर पूर्ववर्ती बैकस्लैश से बचकर शामिल किया जा सकता है। यूनिकोड समर्थन भिन्न होता है।


एस-एक्सप्र परिभाषा का पुनरावर्ती मामला परंपरागत रूप से विपक्ष कोशिकाओं का उपयोग करके कार्यान्वित किया जाता है।
एस-एक्सपीआर परिभाषा की पुनरावर्ती स्थिति परंपरागत रूप से कॉन कोष्ठकों का उपयोग करके कार्यान्वित किया जाता है।


एस-अभिव्यक्ति मूल रूप से केवल [[ एम-अभिव्यक्ति |एम-अभिव्यक्ति]] द्वारा हेरफेर किए जाने वाले डेटा के लिए अभिप्रेत थे, परन्तु लिस्प का पहला कार्यान्वयन एम-अभिव्यक्ति के एस-अभिव्यक्ति एन्कोडिंग का दुभाषिया था, और लिस्प प्रोग्रामर जल्द ही दोनों कोड के लिए एस-अभिव्यक्ति का उपयोग करने के आदी हो गए। और डेटा।
एस-अभिव्यक्ति मूल रूप से मात्र [[ एम-अभिव्यक्ति |एम-अभिव्यक्ति]] द्वारा अन्तःक्षेप किए जाने वाले डेटा के लिए अभिप्रेत थे, परन्तु लिस्प का प्रथम कार्यान्वयन एम-अभिव्यक्ति के एस-अभिव्यक्ति एन्कोडिंग का इंटरप्रेटर था, और लिस्प प्रोग्रामर शीघ्र ही दोनों कोड और डेटा के लिए एस-अभिव्यक्ति का उपयोग करने के प्रवृत्त हो गए। इसका अर्थ है कि लिस्प समजातीय है; अर्थात्, प्रोग्रामों का प्राथमिक प्रतिनिधित्व भी आदिम प्रकार की भाषा में डेटा संरचना है।
इसका मतलब है कि लिस्प समजातीय है; अर्थात्, कार्यक्रमों का प्राथमिक प्रतिनिधित्व भी आदिम प्रकार की भाषा में डेटा संरचना है।


=== डेटा एस-अभिव्यक्ति के उदाहरण ===
=== डेटा एस-अभिव्यक्ति के उदाहरण ===


नीडित सूचियों को एस-अभिव्यक्ति के रूप में लिखा जा सकता है: <code>((milk juice) (honey marmalade))</code> दो-तत्व S-अभिव्यक्ति है जिसके तत्व भी दो-तत्व S-अभिव्यक्ति हैं। लिस्प (और यह आलेख) में प्रयुक्त व्हाइटस्पेस-पृथक संकेतन सामान्य है। पंक्ति विराम (न्यूलाइन वर्ण) आमतौर पर विभाजक के रूप में योग्य होते हैं।
नीडित सूचियों को एस-अभिव्यक्ति के रूप में लिखा जा सकता है: <code>((milk juice) (honey marmalade))</code> दो-अवयव एस-अभिव्यक्ति है जिसके अवयव भी दो-अवयव एस-अभिव्यक्ति हैं। लिस्प (और यह आलेख) में प्रयुक्त व्हाइटस्पेस-पृथक अंकन सामान्य है। पंक्ति विराम (न्यूलाइन कैरैक्टर) सामान्यतः विभाजक के रूप में योग्य होते हैं।


यह एस-अभिव्यक्ति (गज़दार/मेलिश, लिस्प में प्राकृतिक भाषा प्रसंस्करण) के रूप में लिखे गए अंग्रेजी के छोटे से उपसमुच्चय के लिए सरल संदर्भ-मुक्त व्याकरण है, जहां एस = वाक्य, एनपी = संज्ञा वाक्यांश, वीपी = क्रिया वाक्यांश, वी = क्रिया :
यह एस-अभिव्यक्ति (गज़दार/मेलिश, लिस्प में प्राकृतिक भाषा प्रसंस्करण) के रूप में लिखे गए अंग्रेजी के छोटे से उपसमुच्चय के लिए सरल संदर्भ-मुक्त व्याकरण है, जहां S = वाक्य, NP = संज्ञा वाक्यांश, VP = क्रिया वाक्यांश, V = क्रिया :
<syntaxhighlight lang="lisp">
<syntaxhighlight lang="lisp">
(((S) (NP VP))
(((S) (NP VP))
Line 60: Line 58:
</syntaxhighlight>
</syntaxhighlight>


=== सोर्स कोड एस-अभिव्यक्ति का उदाहरण ===
प्रोग्राम कोड एस-अभिव्यक्ति में लिखा जा सकता है, सामान्यतः प्रीफिक्स अंकन का उपयोग करते हुए।


 
इस प्रकार से सामान्य लिस्प में उदाहरण:
=== सोर्स कोड एस-अभिव्यक्ति === का उदाहरण
प्रोग्राम कोड एस-अभिव्यक्ति में लिखा जा सकता है, आमतौर पर प्रीफिक्स संकेतन का उपयोग करते हुए।
 
सामान्य लिस्प में उदाहरण:
<syntaxhighlight lang="lisp">
<syntaxhighlight lang="lisp">
(defun factorial (x)
(defun factorial (x)
Line 72: Line 68:
       (* x (factorial (- x 1)))))
       (* x (factorial (- x 1)))))
</syntaxhighlight>
</syntaxhighlight>
फ़ंक्शन रीड का उपयोग करके एस-अभिव्यक्ति को लिस्प में पढ़ा जा सकता है। रीड एस-अभिव्यक्ति के टेक्स्टुअल प्रतिनिधित्व को पढ़ता है और लिस्प डेटा लौटाता है। फ़ंक्शन PRINT का उपयोग S-अभिव्यक्ति को आउटपुट करने के लिए किया जा सकता है। आउटपुट तब फ़ंक्शन रीड के साथ पढ़ा जा सकता है, जब सभी मुद्रित डेटा ऑब्जेक्ट्स में पठनीय प्रतिनिधित्व होता है। लिस्प में संख्याओं, स्ट्रिंग्स, प्रतीकों, सूचियों और कई अन्य डेटा प्रकारों के लिए पठनीय निरूपण हैं। PPRINT फ़ंक्शन का उपयोग करके प्रोग्राम कोड को सुंदर मुद्रित एस-अभिव्यक्ति के रूप में स्वरूपित किया जा सकता है (नोट: दो Ps के साथ, सुंदर-प्रिंट के लिए छोटा)।
फ़ंक्शन READ का उपयोग करके एस-अभिव्यक्ति को लिस्प में पढ़ा जा सकता है। READ एस-अभिव्यक्ति के टेक्स्टुअल प्रतिनिधित्व को पढ़ता है और लिस्प डेटा लौटाता है। फ़ंक्शन PRINT का उपयोग एस-अभिव्यक्ति को आउटपुट करने के लिए किया जा सकता है। आउटपुट तब फ़ंक्शन READ के साथ पढ़ा जा सकता है, जब सभी मुद्रित डेटा ऑब्जेक्ट में पठनीय प्रतिनिधित्व होता है। लिस्प में संख्याओं, स्ट्रिंग्स, प्रतीकों, सूचियों और कई अन्य डेटा प्रकारों के लिए पठनीय निरूपण हैं। PPRINT फ़ंक्शन का उपयोग करके प्रोग्राम कोड को सुंदर मुद्रित एस-अभिव्यक्ति के रूप में स्वरूपित किया जा सकता है (नोट: दो Ps के साथ, ''सुंदर''-प्रिंट के लिए छोटा)।


लिस्प प्रोग्राम वैध एस-अभिव्यक्ति हैं, परन्तु सभी एस-अभिव्यक्ति मान्य लिस्प प्रोग्राम नहीं हैं। <code>(1.0 + 3.1)</code> वैध एस-अभिव्यक्ति है, परन्तु वैध लिस्प प्रोग्राम नहीं है, क्योंकि लिस्प उपसर्ग संकेतन का उपयोग करता है और फ्लोटिंग पॉइंट नंबर (यहां 1.0) ऑपरेशन (अभिव्यक्ति का पहला तत्व) के रूप में मान्य नहीं है।
लिस्प प्रोग्राम वैध एस-अभिव्यक्ति हैं, परन्तु सभी एस-अभिव्यक्ति मान्य लिस्प प्रोग्राम नहीं हैं। <code>(1.0 + 3.1)</code> वैध एस-अभिव्यक्ति है, परन्तु वैध लिस्प प्रोग्राम नहीं है, क्योंकि लिस्प उपसर्ग अंकन का उपयोग करता है और फ्लोटिंग पॉइंट नंबर (यहां 1.0) ऑपरेशन (अभिव्यक्ति का प्रथम अवयव) के रूप में मान्य नहीं है।


एक एकल उद्धरण चिह्न से पहले एस-अभिव्यक्ति, जैसा कि <code>'x</code>, लिस्प (प्रोग्रामिंग भाषा) के लिए वाक्यात्मक चीनी है # स्व-मूल्यांकन रूपों और उद्धरण | उद्धृत एस-अभिव्यक्ति, इस मामले में <code>(quote x)</code>.
एक एकल उद्धरण चिह्न से पहले एस-अभिव्यक्ति, जैसा कि <code>'x</code>, लिस्प (प्रोग्रामिंग भाषा) के लिए वाक्यात्मक चीनी है # स्व-मूल्यांकन रूपों और उद्धरण | उद्धृत एस-अभिव्यक्ति, इस स्थिति में <code>(quote x)</code>.


== पार्सिंग ==
== पार्सिंग ==
एस-अभिव्यक्ति की तुलना अक्सर एक्सएमएल से की जाती है: मुख्य अंतर यह है कि एस-अभिव्यक्ति में केवल प्रकार का कंटेनमेंट होता है, बिंदीदार युग्म, जबकि एक्सएमएल टैग में सरल गुण, अन्य टैग या [[सीडीएटीए]] हो सकते हैं, प्रत्येक अलग-अलग सिंटैक्स का उपयोग करता है। सरल उपयोग के मामलों के लिए, एस-अभिव्यक्ति एक्सएमएल की तुलना में सरल हैं, परन्तु अधिक उन्नत उपयोग के मामलों के लिए, एक्सएमएल में क्वेरी भाषा है जिसे [[XPath]] कहा जाता है, एक्सएमएल डेटा के प्रबंधन को आसान बनाने के लिए कई टूल और थर्ड पार्टी लाइब्रेरी।
एस-अभिव्यक्ति की तुलना अक्सर एक्सएमएल से की जाती है: मुख्य अंतर यह है कि एस-अभिव्यक्ति में मात्र प्रकार का कंटेनमेंट होता है, बिंदीदार युग्म, जबकि एक्सएमएल टैग में सरल गुण, अन्य टैग या [[सीडीएटीए]] हो सकते हैं, प्रत्येक अलग-अलग सिंटैक्स का उपयोग करता है। सरल उपयोग के मामलों के लिए, एस-अभिव्यक्ति एक्सएमएल की तुलना में सरल हैं, परन्तु अधिक उन्नत उपयोग के मामलों के लिए, एक्सएमएल में क्वेरी भाषा है जिसे [[XPath]] कहा जाता है, एक्सएमएल डेटा के प्रबंधन को आसान बनाने के लिए कई टूल और थर्ड पार्टी लाइब्रेरी।


== मानकीकरण ==
== मानकीकरण ==


कुछ लिस्प-व्युत्पन्न प्रोग्रामिंग भाषाओं के मानकों में उनके एस-अभिव्यक्ति सिंटैक्स के लिए विनिर्देश शामिल है। इनमें सामान्य लिस्प (ANSI मानक दस्तावेज़ ANSI INCITS 226-1994 (R2004)), स्कीम (प्रोग्रामिंग भाषा) (R5RS और [[R6RS]]) शामिल हैं।<ref>{{Cite journal|title=Revised6 Report on the Algorithmic Language Scheme|date=Aug 12, 2009|journal=Journal of Functional Programming|volume=19|issue=S1|pages=1–301|doi=10.1017/S0956796809990074|last1=Sperber|first1=Michael|last2=Dybvig|first2=R. Kent|last3=Flatt|first3=Matthew|last4=Van Straaten|first4=Anton|last5=Findler|first5=Robby|last6=Matthews|first6=Jacob|citeseerx=10.1.1.372.373}}</ref>), और आईएसएलआईएसपी।
कुछ लिस्प-व्युत्पन्न प्रोग्रामिंग भाषाओं के मानकों में उनके एस-अभिव्यक्ति सिंटैक्स के लिए विनिर्देश सम्मिलित है। इनमें सामान्य लिस्प (ANSI मानक डॉक्यूमेंट ANSI INCITS 226-1994 (R2004)), स्कीम (प्रोग्रामिंग भाषा) (R5RS और [[R6RS]]) सम्मिलित हैं।<ref>{{Cite journal|title=Revised6 Report on the Algorithmic Language Scheme|date=Aug 12, 2009|journal=Journal of Functional Programming|volume=19|issue=S1|pages=1–301|doi=10.1017/S0956796809990074|last1=Sperber|first1=Michael|last2=Dybvig|first2=R. Kent|last3=Flatt|first3=Matthew|last4=Van Straaten|first4=Anton|last5=Findler|first5=Robby|last6=Matthews|first6=Jacob|citeseerx=10.1.1.372.373}}</ref>), और आईएसएलआईएसपी।


=== रिवेस्ट का संस्करण ===
=== रिवेस्ट का संस्करण ===
Line 89: Line 85:
मई 1997 में, [[रॉन रिवेस्ट]] ने [[इंटरनेट ड्राफ्ट]] प्रस्तुत किया<ref>[https://web.archive.org/web/20230223024606/http://people.csail.mit.edu/rivest/Sexp.txt  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</ref> टिप्पणियों के अनुरोध के रूप में प्रकाशन के लिए विचार किया जाएगा। मसौदे ने लिस्प एस-अभिव्यक्ति पर आधारित सिंटैक्स को परिभाषित किया परन्तु विशेष रूप से प्रोग्रामिंग के अतिरिक्त सामान्य-उद्देश्य डेटा भंडारण और विनिमय (एक्सएमएल के समान) के लिए अभिप्रेत है। इसे कभी भी RFC के रूप में स्वीकृत नहीं किया गया था, परन्तु तब से इसे अन्य RFC (जैसे RFC 2693) और कई अन्य प्रकाशनों द्वारा उद्धृत और उपयोग किया जाता है।<ref>[https://scholar.google.com/scholar?hl=en&lr=&safe=off&q=rivest+sexp&btnG=Search rivest sexp], Google Scholar (search)</ref> यह मूल रूप से [[सरल सार्वजनिक कुंजी अवसंरचना]] में उपयोग के लिए अभिप्रेत था।
मई 1997 में, [[रॉन रिवेस्ट]] ने [[इंटरनेट ड्राफ्ट]] प्रस्तुत किया<ref>[https://web.archive.org/web/20230223024606/http://people.csail.mit.edu/rivest/Sexp.txt  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</ref> टिप्पणियों के अनुरोध के रूप में प्रकाशन के लिए विचार किया जाएगा। मसौदे ने लिस्प एस-अभिव्यक्ति पर आधारित सिंटैक्स को परिभाषित किया परन्तु विशेष रूप से प्रोग्रामिंग के अतिरिक्त सामान्य-उद्देश्य डेटा भंडारण और विनिमय (एक्सएमएल के समान) के लिए अभिप्रेत है। इसे कभी भी RFC के रूप में स्वीकृत नहीं किया गया था, परन्तु तब से इसे अन्य RFC (जैसे RFC 2693) और कई अन्य प्रकाशनों द्वारा उद्धृत और उपयोग किया जाता है।<ref>[https://scholar.google.com/scholar?hl=en&lr=&safe=off&q=rivest+sexp&btnG=Search rivest sexp], Google Scholar (search)</ref> यह मूल रूप से [[सरल सार्वजनिक कुंजी अवसंरचना]] में उपयोग के लिए अभिप्रेत था।


रिवेस्ट का प्रारूप एस-अभिव्यक्ति को ऑक्टेट-स्ट्रिंग ([[बाइट]]्स की श्रृंखला) या अन्य एस-अभिव्यक्ति की सीमित सूची के रूप में परिभाषित करता है। यह इस संरचना को व्यक्त करने के लिए तीन इंटरचेंज स्वरूपों का वर्णन करता है। उन्नत परिवहन है, जो स्वरूपण के मामले में बहुत लचीला है, और वाक्यात्मक रूप से लिस्प-शैली के अभिव्यक्तियों के समान है, परन्तु वे समान नहीं हैं। उन्नत परिवहन, उदाहरण के लिए, ऑक्टेट-स्ट्रिंग्स को शब्दशः प्रदर्शित करने की अनुमति देता है (स्ट्रिंग की लंबाई कोलन और पूरे कच्चे स्ट्रिंग के बाद), उद्धृत फॉर्म जो एस्केप कैरेक्टर, [[हेक्साडेसिमल]], [[बेस 64]] की अनुमति देता है, या सीधे टोकन के रूप में रखा जाता है यदि यह मिलता है कुछ शर्तें। (रिवेस्ट के टोकन लिस्प टोकन से भिन्न होते हैं जिसमें पूर्व सिर्फ सुविधा और सौंदर्यशास्त्र के लिए होते हैं, और अन्य स्ट्रिंग्स की तरह ही व्यवहार किए जाते हैं, जबकि बाद वाले का विशिष्ट वाक्यात्मक अर्थ होता है।)
रिवेस्ट का प्रारूप एस-अभिव्यक्ति को ऑक्टेट-स्ट्रिंग ([[बाइट]]्स की श्रृंखला) या अन्य एस-अभिव्यक्ति की सीमित सूची के रूप में परिभाषित करता है। यह इस संरचना को व्यक्त करने के लिए तीन इंटरचेंज स्वरूपों का कैरैक्टरन करता है। उन्नत परिवहन है, जो स्वरूपण के स्थिति में बहुत लचीला है, और वाक्यात्मक रूप से लिस्प-शैली के अभिव्यक्तियों के समान है, परन्तु वे समान नहीं हैं। उन्नत परिवहन, उदाहरण के लिए, ऑक्टेट-स्ट्रिंग्स को शब्दशः प्रदर्शित करने की अनुमति देता है (स्ट्रिंग की लंबाई कोलन और पूरे कच्चे स्ट्रिंग के बाद), उद्धृत फॉर्म जो एस्केप कैरेक्टर, [[हेक्साडेसिमल]], [[बेस 64]] की अनुमति देता है, या सीधे टोकन के रूप में रखा जाता है यदि यह मिलता है कुछ शर्तें। (रिवेस्ट के टोकन लिस्प टोकन से भिन्न होते हैं जिसमें पूर्व सिर्फ सुविधा और सौंदर्यशास्त्र के लिए होते हैं, और अन्य स्ट्रिंग्स की तरह ही व्यवहार किए जाते हैं, जबकि बाद वाले का विशिष्ट वाक्यात्मक अर्थ होता है।)


रिवेस्ट का मसौदा डिजिटल हस्ताक्षर उद्देश्यों के लिए [[कैनोनिकल एस-एक्सप्रेशन|कैनोनिकल एस-अभिव्यक्ति]] को परिभाषित करता है। इसका उद्देश्य कॉम्पैक्ट होना है, पार्स करना आसान है, और किसी सार एस-अभिव्यक्ति के लिए अद्वितीय है। यह केवल वर्बैटिम स्ट्रिंग्स की अनुमति देता है, और बाहरी स्ट्रिंग्स को स्वरूपित करने के रूप में व्हाइटस्पेस को प्रतिबंधित करता है। अंत में मूल परिवहन प्रतिनिधित्व है, जो या तो विहित रूप है या बेस64 के समान एन्कोडेड है और [[ब्रैकेट]] से घिरा हुआ है, बाद वाला सिस्टम में कैनोनिक रूप से एन्कोडेड एस-अभिव्यक्ति को सुरक्षित रूप से परिवहन करने का इरादा रखता है जो रिक्ति को परिवर्तित कर सकता है (उदाहरण के लिए ईमेल सिस्टम जो 80-वर्ण-चौड़ी रेखाएँ हैं और इससे अधिक कुछ भी लपेटता है)।
रिवेस्ट का मसौदा डिजिटल हस्ताक्षर उद्देश्यों के लिए [[कैनोनिकल एस-एक्सप्रेशन|कैनोनिकल एस-अभिव्यक्ति]] को परिभाषित करता है। इसका उद्देश्य कॉम्पैक्ट होना है, पार्स करना आसान है, और किसी सार एस-अभिव्यक्ति के लिए अद्वितीय है। यह मात्र वर्बैटिम स्ट्रिंग्स की अनुमति देता है, और बाहरी स्ट्रिंग्स को स्वरूपित करने के रूप में व्हाइटस्पेस को प्रतिबंधित करता है। अंत में मूल परिवहन प्रतिनिधित्व है, जो या तो विहित रूप है या बेस64 के समान एन्कोडेड है और [[ब्रैकेट]] से घिरा हुआ है, बाद वाला सिस्टम में कैनोनिक रूप से एन्कोडेड एस-अभिव्यक्ति को सुरक्षित रूप से परिवहन करने का इरादा रखता है जो रिक्ति को परिवर्तित कर सकता है (उदाहरण के लिए ईमेल सिस्टम जो 80-कैरैक्टर-चौड़ी रेखाएँ हैं और इससे अधिक कुछ भी लपेटता है)।


यह प्रारूप SPKI के बाहर उपयोग के लिए व्यापक रूप से अनुकूलित नहीं किया गया है (कुछ उपयोगकर्ता [[GnuPG]], libgcrypt, Nettle (क्रिप्टोग्राफ़िक लाइब्रेरी) और [[GNU]] lsh हैं)। रिवेस्ट का एस-अभिव्यक्ति वेब पेज पार्सर और जनरेटर ([[मेरा लाइसेंस]] के तहत उपलब्ध) के लिए सी (प्रोग्रामिंग भाषा) स्रोत कोड प्रदान करता है, जिसे अन्य कार्यक्रमों में अनुकूलित और एम्बेड किया जा सकता है।<ref>{{Cite web|url=https://web.archive.org/web/20230223024606/http://people.csail.mit.edu/rivest/Sexp.txt|title=SEXP (एस-एक्सप्रेशन)|website=people.csail.mit.edu}}</ref> इसके अलावा, प्रारूप को स्वतंत्र रूप से लागू करने पर कोई प्रतिबंध नहीं है।
यह प्रारूप SPKI के बाहर उपयोग के लिए व्यापक रूप से अनुकूलित नहीं किया गया है (कुछ उपयोगकर्ता [[GnuPG]], libgcrypt, Nettle (क्रिप्टोग्राफ़िक लाइब्रेरी) और [[GNU]] lsh हैं)। रिवेस्ट का एस-अभिव्यक्ति वेब पेज पार्सर और जनरेटर ([[मेरा लाइसेंस]] के तहत उपलब्ध) के लिए सी (प्रोग्रामिंग भाषा) स्रोत कोड प्रदान करता है, जिसे अन्य प्रोग्रामों में अनुकूलित और एम्बेड किया जा सकता है।<ref>{{Cite web|url=https://web.archive.org/web/20230223024606/http://people.csail.mit.edu/rivest/Sexp.txt|title=SEXP (एस-एक्सप्रेशन)|website=people.csail.mit.edu}}</ref> इसके अतिरिक्त, प्रारूप को स्वतंत्र रूप से लागू करने पर कोई प्रतिबंध नहीं है।


== यह भी देखें ==
== यह भी देखें ==
Line 109: Line 105:


==बाहरी संबंध==
==बाहरी संबंध==
* [https://github.com/mjsottile/sfsexp sfsexp] the small, fast S-expression library for C/C++ on GitHub
* [https://github.com/mjsottile/sfsexp sfsexp] the small, fast एस-expression library for C/C++ on GitHub
* [http://leon.bottou.org/projects/minilisp miniलिस्प], by Léon Bottou.
* [http://leon.bottou.org/projects/minilisp miniलिस्प], by Léon Bottou.
* [http://rosettacode.org/wiki/S-expressions S-expressions on Rosettacode] has implementations of readers and writers in many languages.
* [http://rosettacode.org/wiki/S-expressions एस-expressions on Rosettacode] has implementations of readers and writers in many languages.


{{Lisp programming language}}
{{Lisp programming language}}

Revision as of 19:35, 27 June 2023

ट्री (डेटा संरचना) एस-अभिव्यक्ति का प्रतिनिधित्व करने वाली डेटा संरचना (* 2 (+ 3 4))

कंप्यूटर प्रोग्रामिंग में, एस-अभिव्यक्ति (या प्रतीकात्मक अभिव्यक्ति, जिसे सेक्सपीआर या सेक्सपी के रूप में संक्षिप्त किया गया है) नीडित सूची (कंप्यूटिंग) (ट्री डेटा संरचना) डेटा के लिए समान नाम वाले अंकन में अभिव्यक्ति है। प्रोग्रामिंग भाषा लिस्प (प्रोग्रामिंग भाषा) के लिए एस-अभिव्यक्ति का आविष्कार किया गया था और इसे लोकप्रिय बनाया गया था, जो उन्हें स्रोत कोड के साथ-साथ डेटा के लिए भी उपयोग करता है।

लिस्प के सामान्य संश्लेषित सिंटेक्स (प्रोग्रामिंग भाषाएं) में, एस-अभिव्यक्ति को शास्त्रीय रूप से परिभाषित किया गया है[1] जैसा की दर्शया गया है

  1. xरूप का परमाणु, या
  2. (x . y) रूप की अभिव्यक्ति (कंप्यूटर विज्ञान) जहां x और y एस-अभिव्यक्ति हैं।

यह परिभाषा कोशिकाओं की श्रृंखला के रूप में सूची के लिस्प के प्रतिनिधित्व को दर्शाती है, प्रत्येक क्रमित युग्म है। साधारण सूचियों में, y आगमी कोष्ठिका (यदि कोई हो) की ओर संकेत करता है, इस प्रकार संलग्न सूची बनाता है। परिभाषा के पुनरावर्ती अनुच्छेद का अर्थ है कि यह प्रतिनिधित्व और एस-अभिव्यक्ति अंकन दोनों ही किसी भी बाइनरी ट्री का प्रतिनिधित्व कर सकते हैं। यद्यपि, प्रतिनिधित्व सैद्धांतिक रूप से परिपत्र संदर्भों की अनुमति दे सकता है, ऐसी स्थितियों में संरचना निश्चित ही ट्री नहीं है, परन्तु चक्रीय ग्राफ है, और शास्त्रीय एस-अभिव्यक्ति अंकन में इसका प्रतिनिधित्व नहीं किया जा सकता है जब तक कि प्रति संदर्भ के लिए अंकन प्रदान नहीं किया जाता है (एसक्यूएल विदेशी कुंजी, एसजीएमएल/एक्सएमएल आईडीआरईएफ, आदि के अनुरूप)। सामान्य लिस्प [2] और योजना (प्रोग्रामिंग भाषा)[3] जैसी आधुनिक लिस्प उपभाषा डेटाम लेबल के माध्यम से ऐसा सिंटैक्स प्रदान करती हैं, जिसके साथ ऑब्जेक्टओं को चिह्नित किया जा सकता है, जिसे बाद में कहीं और दोहराया जा सकता है, जो फिर द्विगुणित संरचना के अतिरिक्त साझा को इंगित करना, जिससे लिस्प पाठक या प्रारूप (सामान्य लिस्प) को पता लगाने में सक्षम बनाना और इस प्रकार असीमित पुनरावृत्ति के बिना चक्रों के मूल्यांकन या निष्पादन को ट्रिगर करना

#n=(x y . #n#)

एक परमाणु की परिभाषा संदर्भ के अनुसार परिवर्तित होती रहती है; जॉन मैक्कार्थी (कंप्यूटर वैज्ञानिक) द्वारा मूल परिभाषा में,[1] यह माना गया था कि अलग-अलग प्रतीकों (प्रोग्रामिंग) का अनंत समुच्चय स्थित था, जिसे लैटिन लिपियों और एकल एम्बेडेड रिक्त स्थान ( कैरैक्टर स्ट्रिंग (कंप्यूटिंग) और संख्यात्मक शाब्दिक (कंप्यूटर प्रोग्रामिंग) का एक उपसमुच्चय ) वाले अंकों की श्रृंखला के रूप में दर्शाया गया था।

अधिकांश आधुनिक सेक्सपीआर अंकन अधिक सामान्य उद्धृत स्ट्रिंग्स (उदाहरण के लिए विराम चिह्न या पूर्ण यूनिकोड सहित) की अनुमति देते हैं, और 2 से अधिक सदस्यों के साथ सूचियों का प्रतिनिधित्व करने के लिए संक्षिप्त अंकन का उपयोग करते हैं, ताकि

(x y z)

इसका अर्थ है कि

(x . (y . (z . NIL)))

NIL विशेष अंत-सूची ऑब्जेक्ट (कंप्यूटर विज्ञान) है (वैकल्पिक रूप लिखित (), जो योजना (प्रोग्रामिंग भाषा) में एकमात्र प्रतिनिधित्व है[4])।

प्रोग्रामिंग भाषाओं के लिस्प वर्ग में, स्रोत कोड और डेटा दोनों का प्रतिनिधित्व करने के लिए एस-अभिव्यक्ति का उपयोग किया जाता है। एस-अभिव्यक्ति के अन्य उपयोग डॉक्यूमेंट शैली शब्दार्थ और विशिष्टता भाषा जैसी लिस्प-व्युत्पन्न भाषाओं में हैं, और इंटरनेट संदेश एक्सेस प्रोटोकॉल और जॉन मैककार्थी (कंप्यूटर वैज्ञानिक) के सामान्य व्यापार संचार भाषा जैसे संचार प्रोटोकॉल में मार्क-अप के रूप में हैं। इसका उपयोग वेब असेंबली के पाठ प्रतिनिधित्व के रूप में भी किया जाता है। सिंटैक्स और समर्थित डेटा प्रकारों का विवरण अलग-अलग भाषाओं में भिन्न होता है, परन्तु इन भाषाओं में सबसे सामान्य विशेषता एस-अभिव्यक्ति और प्रीफ़िक्स अंकन का उपयोग है।

डेटाटाइप और सिंटैक्स

एस-अभिव्यक्ति प्रारूप के कई प्रकार हैं, जो विभिन्न डेटाटाइप के लिए विभिन्न सिंटैक्स का समर्थन करते हैं। इस प्रकार से सबसे व्यापक रूप से समर्थित हैं:

  • सूचियाँ और जोड़े: (1 () (2 . 3) (4))
  • प्रतीक: with-hyphen ?@!$ |a symbol with spaces|
  • स्ट्रिंग्स: "Hello, world!"
  • पूर्णांक: -9876543210
  • दशमलव संख्याएं: -0.0 6.28318 6.022e23

कैरैक्टर # का उपयोग अक्सर सिंटैक्स में एक्सटेंशन उपसर्ग करने के लिए किया जाता है, उदाहरण के लिए हेक्साडेसिमल पूर्णांकों के लिए #x10 हेक्साडेसिमल या कैरैक्टरों के लिए #\C है।

लिस्प में प्रयोग

लिस्प में स्रोत कोड का प्रतिनिधित्व करते समय, एस-अभिव्यक्ति का प्रथम अवयव सामान्यतः ऑपरेटर या फ़ंक्शन का नाम होता है और किसी भी शेष अवयवों को तर्कों के रूप में माना जाता है। इसे उपसर्ग अंकन या पोलिश अंकन कहा जाता है। उदाहरण के रूप में, C (प्रोग्रामिंग लैंग्वेज) में 4 == (2 + 2) लिखी गई बूलियन तर्क अभिव्यक्ति लिखा गया को लिस्प के एस-एक्सपीआर-आधारित उपसर्ग अंकन में (= 4 (+ 2 2)) के रूप में दर्शाया गया है।

जैसा ऊपर बताया गया है, परमाणु की यथार्थ परिभाषा एलआईएसपी जैसी भाषाओं में भिन्न होती है। उद्धृत स्ट्रिंग में सामान्यतः उद्धरण के अतिरिक्त कुछ भी हो सकता है, जबकि एक गैर-उद्धृत पहचानकर्ता परमाणु में सामान्यतः उद्धरण, रिक्त स्थान के कैरैक्टर, लघु कोष्ठक, कोष्ठक, धनुर्कोष्ठक, बैकस्लैश और अर्धविराम के अतिरिक्त कुछ भी हो सकता है। किसी भी स्थिति में, निषिद्ध कैरैक्टर को सामान्यतः पूर्ववर्ती बैकस्लैश से बचकर सम्मिलित किया जा सकता है। यूनिकोड समर्थन भिन्न होता है।

एस-एक्सपीआर परिभाषा की पुनरावर्ती स्थिति परंपरागत रूप से कॉन कोष्ठकों का उपयोग करके कार्यान्वित किया जाता है।

एस-अभिव्यक्ति मूल रूप से मात्र एम-अभिव्यक्ति द्वारा अन्तःक्षेप किए जाने वाले डेटा के लिए अभिप्रेत थे, परन्तु लिस्प का प्रथम कार्यान्वयन एम-अभिव्यक्ति के एस-अभिव्यक्ति एन्कोडिंग का इंटरप्रेटर था, और लिस्प प्रोग्रामर शीघ्र ही दोनों कोड और डेटा के लिए एस-अभिव्यक्ति का उपयोग करने के प्रवृत्त हो गए। इसका अर्थ है कि लिस्प समजातीय है; अर्थात्, प्रोग्रामों का प्राथमिक प्रतिनिधित्व भी आदिम प्रकार की भाषा में डेटा संरचना है।

डेटा एस-अभिव्यक्ति के उदाहरण

नीडित सूचियों को एस-अभिव्यक्ति के रूप में लिखा जा सकता है: ((milk juice) (honey marmalade)) दो-अवयव एस-अभिव्यक्ति है जिसके अवयव भी दो-अवयव एस-अभिव्यक्ति हैं। लिस्प (और यह आलेख) में प्रयुक्त व्हाइटस्पेस-पृथक अंकन सामान्य है। पंक्ति विराम (न्यूलाइन कैरैक्टर) सामान्यतः विभाजक के रूप में योग्य होते हैं।

यह एस-अभिव्यक्ति (गज़दार/मेलिश, लिस्प में प्राकृतिक भाषा प्रसंस्करण) के रूप में लिखे गए अंग्रेजी के छोटे से उपसमुच्चय के लिए सरल संदर्भ-मुक्त व्याकरण है, जहां S = वाक्य, NP = संज्ञा वाक्यांश, VP = क्रिया वाक्यांश, V = क्रिया :

(((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)))))

फ़ंक्शन READ का उपयोग करके एस-अभिव्यक्ति को लिस्प में पढ़ा जा सकता है। READ एस-अभिव्यक्ति के टेक्स्टुअल प्रतिनिधित्व को पढ़ता है और लिस्प डेटा लौटाता है। फ़ंक्शन PRINT का उपयोग एस-अभिव्यक्ति को आउटपुट करने के लिए किया जा सकता है। आउटपुट तब फ़ंक्शन READ के साथ पढ़ा जा सकता है, जब सभी मुद्रित डेटा ऑब्जेक्ट में पठनीय प्रतिनिधित्व होता है। लिस्प में संख्याओं, स्ट्रिंग्स, प्रतीकों, सूचियों और कई अन्य डेटा प्रकारों के लिए पठनीय निरूपण हैं। 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] इसके अतिरिक्त, प्रारूप को स्वतंत्र रूप से लागू करने पर कोई प्रतिबंध नहीं है।

यह भी देखें

संदर्भ

  1. 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.
  2. "Common Lisp HyperSpec: 22.4 - The Printer Dictionary: *PRINT-CIRCLE*". 2018-12-28.
  3. "Revised7 Report on the Algorithmic Language‌ Scheme: Section 2.4: Datum Labels" (PDF). 2013-07-06.
  4. "Revised^5 Report on the Algorithmic Language Scheme". schemers.org.
  5. 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.
  6. 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
  7. rivest sexp, Google Scholar (search)
  8. "SEXP (एस-एक्सप्रेशन)". people.csail.mit.edu.


बाहरी संबंध